Регулярные выражения исключают поисковую фразу? - PullRequest
0 голосов
/ 14 июня 2019

Я фильтрую строку и ищу как /(?=test).*/s

это работает. но как я могу исключить поисковую фразу из результата? Я хочу только отдых после этого слова ...

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Вы также можете получить соответствие без положительного результата, сопоставив последнее вхождение теста, а затем забыть, что было найдено, используя \K.Вы также можете сопоставить следующие горизонтальные пробельные символы, используя \h.

^.*\btest\b\h*\K.*$

Regex demo

Если вы хотите получить остаток после первого вхождения test Вы можете сделать точку не жадной .*?

Другой вариант - разделить на \btest\b, чтобы получить все части и выбрать те, которые вы хотите сохранить.

0 голосов
/ 14 июня 2019

Я предполагаю, что, возможно, может сработать выражение с границей слова:

(?=.*\btest\b.*).*(\btest\b).*

Демо 1

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

(?=.*\btest\b.*)(?:.*)(\btest\b)(?:.*)

Демо 2

Пример

$re = '/(?=.*\btest\b.*)(?:.*)(\btest\b)(?:.*)/m';
$str = 'test some other words that comes after
some other words before test some other words that comes after';
$subst = '';

$result = preg_replace($re, $subst, $str);

echo $result;
...