Regex / Preg: нет совпадений, если найдено

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

Пример:

Hello! My name is [b]Peter Jack[/b] 

Если Питер Джек найден с его фамилией, он НЕ будет соответствовать, но если его обнаружит «[b] Peter [/ b]», он будет соответствовать.

Любой, кто я плохо разбираюсь в вещах, комментируйте, если есть что-то еще, что вам нужно, чтобы помочь мне решить эту проблему.


Еще один способ, о котором я могу сказать, – это, если бы я получил ссылку на веб-сайт, он будет соответствовать и делать материал в preg_replace, но если ссылка на сайт заканчивается на .png (изображение), это не будет соответствовать и не будет делать ссылку.

 example.com/image.png 

Не будет соответствовать, потому что он содержит .png

 example.com/image 

Будет соответствовать, потому что он не содержит .png

Непонятно, что вы хотите найти. Если это просто [b]Peter[/b] , вам не нужно регулярное выражение.

Если вы хотите найти одно слово, окруженное живыми тегами BBCode, используйте

 preg_match('%\[b\]\w*\[/b\]%', $subject) 

Если вы хотите найти что-либо в ярлыках BBode bold, если он не содержит Jack , используйте

 preg_match( '%\[b\] # Match [b] (?: # Try to match... (?!Jack) # (unless the word "Jack" occurs there) . # any character )*? # any number of times, as few as possible \[/b\] # Match [/b]%x', $subject)