Regex / Preg: No hay coincidencia, si se encuentra

Estoy tratando de hacer algo de PHP preg. Pero parece que no puedo hacerlo coincidir si quiero una cadena sin algo en ella.

Ejemplo:

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

Si se encuentra a Peter Jack con su apellido, NO coincidirá, pero si se encuentra "[b] Peter [/ b]" coincidirá.

Cualquiera que sea un poco malo explicando cosas, comenta si hay algo más que necesites para ayudarme a resolver esto.

Otra forma de decirlo es que, si tengo un enlace a un sitio web, coincidirá y hará todo lo que esté en preg_replace, pero si el enlace al sitio web finaliza con like .png (una imagen) no coincidirá y no hará un enlace.

example.com/image.png

No se comparará porque contiene .png

example.com/image

Será emparejado porque lo haceno contiene .png