Какой разделитель использовать для preg_replace в PHP (замените работу вне PHP, но не внутри)

Я и моя команда застряли на этом, у меня есть следующий код.

$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut bibendum augue eu arcu mollis cursus. Curabitur nec purus ipsum. Fusce ut erat leo, vitae malesuada lacus. Quisque varius gravida justo ut aliquam. Integer accumsan, ante non volutpat semper, orci sem luctus odio, sit amet convallis odio justo id nisl. Nunc sed lacus nisi, quis accumsan massa. Donec ante enim, fermentum sit amet placerat nec, eleifend elementum nibh [[BLOGIMAGE_20090303011757.jpg||480]] us dolor nec est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam accumsan blandit purus eget vestibulum. Nullam neque sem, suscipit sit amet mattis eu, imperdiet quis ligula. Integer aliquam dapibus gravida. Pellentesque ultrices sapien orci. Suspendisse at eros non dolor accumsan cursus mattis nec justo. [[BLOGIMAGE_20090303011819.jpg||480]] Aenean cursus lacinia arcu vitae malesuada. Fusce fermentum enim sit amet elit fermentum at consectetur ante vulputate. Aliquam sagittis nulla id magna facilisis tempus. Suspendisse eget feugiat libero. Pellentesque non lorem sem, eu posuere velit. Nulla id nulla ligula. [[BLOGIMAGE_20090303011842.jpg||480]] ..... etc"; $pat = "\[\[(.*)\|\|(.*)\]\]"; $mat = '<img src="/path/to/file/imgs/$1" width="$2px" />'; $text = preg_replace($pat , $mat, $text); 

Мы хотим сделать преобразование [[ imagefile || size ]] в тег изображения, используя структуру в матче $ mat. Матч отлично работает в RegExr (программа adobe air), а также проверенные онлайн-тестеры javascript

Ошибка, которую я получаю: –

Сообщение: preg_replace () [function.preg-replace]: разделитель не должен быть буквенно-цифровым или обратным слэшем

Поэтому, если я добавлю ассимилятор, например …

$ pat = "^ [[(. ) \ | \ | (. )]] ^";

Тогда совпадение перестает работать, но я больше не получаю никаких ошибок.

Любая помощь действительно была бы оценена.

Related of "Какой разделитель использовать для preg_replace в PHP (замените работу вне PHP, но не внутри)"

preg_replace() требуется символ разделителя:

 preg_replace("/$pat/" ... 

Традиционно это косая черта, но это может быть любой персонаж – особенно если вам нужна прямая косая черта в регулярном выражении, вы можете прибегнуть к другому персонажу.

Эта гибкость позволяет вам выразить "/http:\/\/foo\/bar\//" («склонный синдром зубочистки») как "!http://foo/bar/!" ,

Символ разделителя необходим для разделения регулярного выражения из флагов регулярного выражения (например, «модификаторы»), например:

 preg_replace("/$pat/i" ... 

… это использует флаг i для объявления не зависящего от регистра регулярного выражения.

Из руководства PHP по разделителям PCRE :

Разделителем может быть любой символ, не являющийся буквенно-цифровым, без обратного слэш-символа.

Часто используемыми разделителями являются косые черты ( / ), хэш-знаки ( # ) и тильды ( ~ ).

Таким образом, вы можете использовать / качестве разделителя для разделения шаблона на дополнительные модификаторы :

 /\[\[(.*)\|\|(.*)\]\]/ 

Но также обратите внимание:

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

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

 /\[\[(.*?)\|\|(.*?)\]\]/ 

пытаться

 $pat = "/\[\[(.*)\|\|(.*)\]\]/m";