php - 正则表达式 php,用 div 替换 ul li

标签 php regex html-lists

我有这个列表:

<ul>
    <li class="myclass">blablabla 1</li>
    <li class="myclass">blablabla 2</li>
    <li class="myclass">blablabla 3</li>
</ul>

我想要一个正则表达式:

<div class="newClass">blablabla 1</div>
<div class="newClass">blablabla 2</div>
<div class="newClass">blablabla 3</div>

仅替换 <li>可以使用这个正则表达式:

$pattern = '#<li class="newClass">(.+)</li>#';
$replacement = '<div class="newClass">$1</div>';
$texte = preg_replace($pattern, $replacement, $texte);

我试图替换 <ul>也是,但它不起作用:

$pattern = '#<ul>(<li class="myclass">(.+)</li>)*</ul>#';
$replacement = '<div class="newClass">$2</div>';
$texte = preg_replace($pattern, $replacement, $texte);

怎么了?

最佳答案

你的模式几乎是正确的。

$pattern = '#<ul>(<li class="myclass">(.+)</li>)*</ul>#';

尽管如此,您的模式中存在多个缺陷。

  • <ul>将假定您所有的 <li ...将以 <ul> 开头<li class="myclass">blablabla 2</li> 不是这种情况.所以,你必须将它与 ? 一起使用最好在非捕获组中..即(?:<ul>)?同样在最后 (?:<\/ul>)? (注意转义字符)

  • 您没有检查 <li.. 之前/之后的空格和换行符应更改为 (\s*<li class="myclass">(.+)<\/li>\s*)

  • 此外,无需添加 *(<li ...>...<\/li>) 之后

您的模式的工作修改将是 (?:<(?:ul|ol)>)?(\s*<li class="myclass">(.+)<\/li>\s*)(?:<\/(?:ul|ol)>)?

参见 demo以获得更多解释和探索。

关于php - 正则表达式 php,用 div 替换 ul li,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29603148/

相关文章:

php - 如何在 WooCommerce 中自动更新特定订单 ID 的订单状态

c# - 正则表达式适用于 .NET 测试站点,但不适用于 C# 环境

regex - 根据文件中的正则表达式设置 Ant 属性

regex - 如何用 Go regexp 中的计数器替换出现的字符串?

html - overflow-y for ul,向下滚动列表

类中的 PHP echo 查询结果?

PHP 如果大于(条件)则不起作用?

php - 将当前时间存储在时间戳中

jquery - 事件链接上的 CSS 样式会短暂工作然后停止

css - 为无序列表/有序列表定义自定义样式规则