我需要将列表中的最后一个顶层 LI的起始标记定位到列表中,该列表可能包含或不包含各种职位中的子列表 - 不使用CSS或Javascript。正则表达式目标列表中的最后一个主要列表
是否有一个简单/优雅的正则表达式可以帮助这个?我不是古茹w /他们,但当我选择所有中间文本(。*)/(。+)更改时,似乎需要贪婪/非贪婪选择器,因为嵌套列表被添加并在名单 - 这是抛弃我。
$pattern = '/^(<ul>.*)<li>(.+<\/li><\/ul>)$/';
$replacement = '$1<li id="lastLi">$3';
也许有一个更简单的方法??转换为XML来定位LI然后转换回来?
即: 单元素
<ul>
<li>TARGET</li>
</ul>
多个元素
年底前<ul>
<li>foo</li>
<li>TARGET</li>
</ul>
嵌套列表
<ul>
<li>
foo
<ul>
<li>bar</li>
</ul>
<li>
<li>TARGET</li>
</ul>
嵌套列表月底
<ul>
<li>foo</li>
<li>
TARGET
<ul>
<li>bar</li>
</ul>
</li>
</ul>
+1,更应如此,在这个情况下,这将是特别困难的事与正则表达式。正则表达式不适合递归结构。 (不,一些正则表达式引擎提供的“递归正则表达式”东西不是很好用。) – 2010-06-07 20:26:02
+1,如果你想要顶级递归,这是非常困难的。我想知道谁降低了这一点,因为在这种情况下,这是完全正确的。事实并非总是如此,你不应该使用正则表达式来解析HTML,但这里肯定是。 – 2010-06-07 20:28:12
虽然该链接是一个很好的(如幽默)阅读,但它并没有告诉OP很多“为什么”他/他不应该做这样的事情。我发现这样的答案(只发布到“html + regex线程”的链接)与LMGTFY链接的类型相同:不是SO的分支。因此我投了票。 – 2010-06-07 20:30:49