PHP: получить последний тег строки с помощью регулярных выражений - PullRequest
0 голосов
/ 03 августа 2011

Довольно простая проблема (но сложное решение): я получил строку в PHP, как показано ниже:

['one']['two']['three']

И из этого я должен извлечь последние теги, чтобы я наконец получил three

также возможно, что есть число, например

[1][2][3]

, и тогда я должен получить 3

Как я могу решить эту проблему?

Спасибо за вашу помощь!

Фло

Ответы [ 3 ]

2 голосов
/ 03 августа 2011

Ваш тег \[[^\]]+\].

3 Теги: (\[[^\]]+\]){3}

3 Теги в конце: (\[[^\]]+\]){3}$

N Теги в конце:(\[[^\]]+\])*$ (N 0..n)

Пример:

<?php
    $string = "['one']['two']['three'][1][2][3]['last']";
    preg_match("/((?:\[[^\]+]*\]){3})$/", $string, $match);
    print_r($match); // Array ( [0] => [2][3]['last'] [1] => [2][3]['last'] ) 
1 голос
/ 03 августа 2011

Этот проверенный код может работать на вас:

function getLastTag($text) {
    $re = '/
        # Match contents of last [Tag].
        \[              # Literal start of last tag.
        (?:             # Group tag contents alternatives.
          \'([^\']+)\'  # Either $1: single quoted,
        | (\d+)         # or $2: un-quoted digits.
        )               # End group of tag contents alts.
        \]              # Literal end of last tag.
        \s*             # Allow trailing whitespace.
        $               # Anchor to end of string.
        /x';
    if (preg_match($re, $text, $matches)) {
        if ($matches[1]) return $matches[1]; // Either single quoted,
        if ($matches[2]) return $matches[2]; // or non quoted digit.
    }
    return null; // No match. Return NULL.
}
1 голос
/ 03 августа 2011

Вот регулярное выражение, которое может работать на вас. Попробуйте это:

[^\[\]']*(?='?\]$)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...