У меня есть немного регулярных выражений в PHP, которые не делают то, что я хочу.Необязательное совпадение регулярных выражений игнорируется
Что я хочу:
[segment type="segment_name"]more text here[/segment]
быть изменен на:
[segmentclass='segment_name segment']more text here[/segment]
и:
[segment]more text here[/segment]
быть изменен на:
[segmentclass=' segment']more text here[/segment]
Вот что у меня есть:
$pattern = '/(\[segment.*?)(type=\"(.+?)\")?(.*?\[\/segment\])/is';
$replacement = '$1class=\'$3 segment\'$4';
$content = preg_replace($pattern, $replacement, $content);
Кто-нибудь есть какие-нибудь идеи? ? after (type = \ "(. +?) \") состоит в том, чтобы сделать этот блок необязательным. Кажется, что замена просто пропускает его, потому что это необязательно. Я думаю, что у меня есть проблема с жадностью где-то, но я не смог разобраться.
Ответьте, если у вас есть идеи по-другому, я тоже мог бы это сделать.
У вас нет закрывающего ']' в вашем шаблоне в любом месте. –
Это должно быть в порядке с совпадением со вторым. *? и затем включается в 4 доллара США. – eli