preg_replace上意想不到的角色


Unexpected characters on preg_replace

我在wordpress菜单系统中使用preg_replace来输出我自己的干净HTML,该HTML适用于gumby框架。但是,当我通过preg_replace运行菜单字符串时

$menu = preg_replace('<ul>','<div class="dropdown"><ul>',$menu);
$menu = preg_replace('</ul>','</div></ul>',$menu);

我在模板中吐出意外的结果,它在我的下拉替换类上方吐出额外的" "<。

有谁知道如何解决这个问题?

在正则表达式中,您始终有一对分隔符。一个鲜为人知的功能是,你可以有一对匹配的类似括号的字符(parens、正方形、大括号或角度),以避免需要逃避里面的任何东西。但是,在这种情况下,这会导致您的"正则表达式"仅替换"ul"和"/ul",而不是整个标签。

要修复,只需使用 str_replace .考虑到您要替换静态字符串,它要便宜得多。还有他来的小马。

另请注意,您的 HTML 标记顺序是错误的。如果你打开div 然后 ul,你应该关闭 ul 然后div。