Как сопоставить строки, используя отрицательный вид сзади с мультилиней? - PullRequest
0 голосов
/ 24 октября 2019

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

//(?<=) - positive lookbehind
$string = "dra Julia \ndr Marcos \ndr Mateus \ndra Ana";
$regex  = "/(?<=dra\s)(\w+)/im";
preg_match_all($regex, $string, $matches);
var_dump($matches);

Работает нормально, возвращая " Джулия " и " Ана"Но отрицательная версия:

$regex  = "/(?<!^dra\s)\b\w+\b$/im";
preg_match_all($regex, $string, $matches);
var_dump($matches);

Возвращает пусто :( Я ожидал" Маркос"и" Матеус", как при использовании regex101 .

Как мне достичь этого результата?

1 Ответ

1 голос
/ 24 октября 2019

После имен ставится пробел. Обратите внимание, что \s также соответствует символу новой строки, а \h соответствует горизонтальному пробелу.

Вы можете обновить свой шаблон до:

(?<!^dra\h)\b\w+\b\h*$

Regex demo

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

...