我需要將列表中的最後一個頂層 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