2010-06-20 58 views
0

此功能不起作用:的PHP的preg_replace

function remove_ul($ul) { 
    $ul = preg_replace('/<ul id="general-nav">/', '<ul class="nav">', $ul, 1); 
    $ul = preg_replace('/</ul>/', '<li class="blank"></li></ul>', $ul, 1); 
    return $ul; 
} 

我想是因为与</ul>

任何想法就行重复/的?

谢谢。

+0

阅读[分隔符](http://www.php.net/manual/en/regexp.reference.delimiters.php)。 – 2010-06-20 16:02:29

+0

感谢您的链接 – Happy 2010-06-20 16:03:28

回答

4

尝试更换此:

$ul = preg_replace('/</ul>/', '<li class="blank"></li></ul>', $ul, 1); 

有:

$ul = preg_replace('/<\/ul>/', '<li class="blank"></li></ul>', $ul, 1); 

或者试试:

$ul = preg_replace('#</ul>#', '<li class="blank"></li></ul>', $ul, 1); 

因为在你的代码,您所指定使用</ul>分隔符/然后,有冲突,你需要逃避分隔符与\或使用#作为分隔符。

1

在第二个表达式(/<\/ul>/)中转义斜杠。如果您的查询变得更加复杂,您可能还必须使用捕获组(括号)。

哦,用正则表达式解析html是邪恶的。在此之前,XHTML正则表达式的流行趋势风暴这篇文章。 :)