PRCE: исключение подстроки в результате захвата группы - PullRequest
2 голосов
/ 06 февраля 2012

Это какой-то академический вопрос, мне просто интересно, можно ли захватить группу (например, с использованием функции PHP preg_match ()) с исключенной в результате подстрокой. Я заинтересован в достижении этого на уровне регулярных выражений. Позвольте мне объяснить, о чем я говорю.

F.e., У меня есть исходная строка вроде:

...   
... needed_NUMERIC_substr_1 not_needed_ALPHA_substr need_NUMERIC_substr2 ...  
...

Можно ли написать регулярное выражение, которое будет возвращать:

Array
(
    [0] => %**NOT_IMPORTANT_THAT_WILL_BE_HERE**%
    [1] => needed_NUMERIC_substr_1 need_NUMERIC_substr2
)

Я понимаю, что можно сопоставить обе необходимые строки отдельно с различными группами захвата и затем выполнить любое требуемое действие в коде. Это просто академический интерес.

Я думал об использовании условных подшаблонов или lookahead и lookbehind утверждений нулевой ширины, но не смог найти решение. Если это возможно, как это может быть достигнуто?

Ответы [ 3 ]

1 голос
/ 06 февраля 2012

Поскольку вопрос действительно заключается в том, как получить 123456 из входной строки 123abc456, я бы не стал использовать preg_match. Вместо этого я бы использовал preg_replace и заменил бы все, что не является цифрой, на пустую строку, чтобы они эффективно удалялись.

$string = '123abc456';
$result = preg_replace('/[^0-9]/', '', $string);
echo $result; // prints 123456
1 голос
/ 06 февраля 2012

Не возможно.Захват групп захватывает только продолжающиеся подстроки входной строки (или вообще ничего).

1 голос
/ 06 февраля 2012

Нет, это невозможно.

preg_match не предоставляет никаких опций, как объединять сопоставленные группы или удалять (заменять пустую строку) часть сопоставленного текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...