Расширение PHP RegEx - Как удалить только url = *? - PullRequest
0 голосов
/ 10 января 2010

Я написал регулярное выражение для удаления тегов BBCode - он просто удаляет разрешенные теги (для последующего подсчета длины строки без тегов).

Я не эксперт, когда дело доходит до регулярных выражений - так что через час я обнаружил, что это довольно эффективно:

$pattern = "/\[\/?(i|b|u|url(.*?)|list|li)[\]\[]*\]/i";
$stripped = preg_replace($pattern, '', $text);

Он удаляет только разрешенные шесть тегов (и не более того, что предполагается) и специальный тег 'url', который может быть расширен как 'url = http://someurl'.

1009 * Т.е. *

in:  [url=someurl]Lorem[/url] ipsum [test]dolor[/test] sit [b]amet[/b].
out: Lorem ipsum [test]dolor[/test] sit amet.

Но проблема в том, что он не только удаляет url = [sometext], но и urlipsum. Я пытался добавить '=' для разбора, но не смог добраться до сути.

У кого-нибудь есть подсказка для меня, как убрать URL, только когда он идет с =?

Ответы [ 3 ]

1 голос
/ 10 января 2010

Попробуйте:

$pattern = '/\[\/?(i|b|u|url(=[^\]]+)?|list|li)[\]\[]*\]/i';
0 голосов
/ 10 января 2010

Вы можете изменить «жадность» квантификаторов, попробуйте добавить модификатор шаблона «U» или убрать вопросительный знак в «. *?», См. PHP doc .

0 голосов
/ 10 января 2010
  $pattern = "/\[\/?(i|b|u|url=(.*?)|url(?=\])|list|li)[\]\[]*\]/i";
...