2016-04-09 2 views
0

Я пытаюсь использовать preg_match, чтобы получить чье-то имя, но я не хочу, чтобы он получил свое имя, если они говорят что-то вроде «мое имя НЕ так и так ...», но у меня возникли проблемы соответствия его:Получение имени пользователя с помощью regex lookahead

$string = "my name is james"; 
preg_match("~my name is (?>!\bnot\b)[a-z]+~", $string, $match); 
print_r($match); 

Так как моя исходной строка не есть слово «не» в нем, он должен был соответствовать строке, но это не так. Что я делаю не так?

Результат:

Array()

Ожидаемый результат:

Array (мое имя Джеймс)

ответ

3

negative lookahead не использует >, does it? (смотреть сзади делает <):

/(?!\bnot\b)[a-z]+/ 
+1

Исправить. '(?>! \ bnot \ b)' является [атомной группой] (http://www.regular-expressions.info/atomic.html), которая соответствует последовательности '! not'. –