这是我的正则表达式:
/<strong>.*ingredients.*<\/ul>/im
假设源代码:
<strong>Contest closes on Thursday May 10th 2012 at 9pm PST</strong></div>
<br />
<br />
<br />
* I am not affiliated with Blue Marble Brands or Ines Rosales Tortas in any way. I am not sponsored by them and did not receive any compensation to write this post...I just simply think the Tortas are wonderful!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-35J5vNrXkqE/T6htXTafrmI/AAAAAAAAA5E/g2mtiuSpSmw/s1600/food+003.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" mea="true" src="http://1.bp.blogspot.com/-35J5vNrXkqE/T6htXTafrmI/AAAAAAAAA5E/g2mtiuSpSmw/s640/food+003.JPG" width="640" /></a></div>
<br />
<strong><span style="font-size: large;">Ingredients:</span></strong><br />
<ul>
<li>Ines Rosales Rosemary and Thyme Tortas</li>
<li>Pizza Sauce (ready made in a jar)</li>
<li>Roma Tomatoes</li>
<li>Roasted Red Peppers </li>
<li>Marinated Artichoke Hearts</li>
<li>Olives (I used Pitted Spanish Manzanilla Olives)</li>
<li>Daiya Vegan Mozzarella Cheese</li>
</ul>
<span style="font-size: large;"><strong>Directions:</strong></span><br />
<br />
Spread small amount of pizza sauce over Torta.
正则表达式贪婪并抓住<strong>Contest...</ul>
的所有内容,但最短的匹配应该产生<strong><span style="font-size: large;">Ingredients...</ul>
这是我的要点:https://gist.github.com/3660370
:: EDIT :: 请在强标签和成分,成分和ul。之间保持灵活性。
答案 0 :(得分:0)
试试这个:
/<strong><span.*ingredients.*<\/ul>/im
请不要使用正则表达式html。请改用Nokogiri或类似的库。
答案 1 :(得分:0)
这应该有效:
/(?!<strong>.*<strong>.*<\/ul>)<strong>.*?ingredients.*?<\/ul>/im
测试here
基本上,正则表达式使用否定前瞻来避免<strong>
之前的多个<\ul>
:(?!<strong>.*<strong>.*<\/ul>)
答案 2 :(得分:0)
我认为这就是你要找的东西:
/<strong>(?:(?!<strong>).)*ingredients.*?<\/ul>/im
使用.*
替换第一个(?:(?!<strong>).)*
,可以在找到<strong>
之前匹配除ingredients
标记之外的任何内容。之后,非贪婪的.*?
会导致它在它看到的</ul>
的第一个实例处停止匹配。 (您的示例仅包含一个<UL>
元素,但我假设实际数据可能包含更多。)
通常的警告适用:即使在完全有效的HTML中,这种正则表达式也有很多方法可以被愚弄,更不用说我们通常在那里看到的残骸。