0

这是我的正则表达式:

/<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.&nbsp; I am not sponsored by them and did not receive any compensation to write this post...I just simply think the&nbsp;Tortas&nbsp;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

::编辑:: 请在强标签和成分之间允许灵活性,以及​​成分和 ul。

4

3 回答 3

0

尝试这个:

/<strong><span.*ingredients.*<\/ul>/im

请不要对 html 进行正则表达式处理。请改用 Nokogiri 或类似的库。

于 2012-09-06T21:21:13.067 回答
0

我想这就是你要找的:

/<strong>(?:(?!<strong>).)*ingredients.*?<\/ul>/im

将第一个替换为.*允许(?:(?!<strong>).)*它在找到之前匹配除另一个<strong>标签之外的任何内容ingredients。在那之后,非贪婪导致它在它看到.*?的第一个实例时停止匹配。</ul>(您的样本仅包含一个<UL>元素,但我假设真实数据可能包含更多元素。)

通常的警告适用:即使在完全有效的 HTML 中,也有很多方法可以欺骗这个正则表达式,更不用说我们通常在那里看到的垃圾了。

于 2012-09-07T11:08:06.543 回答
0

这应该有效:

/(?!<strong>.*<strong>.*<\/ul>)<strong>.*?ingredients.*?<\/ul>/im

在这里测试

基本上,正则表达式使用负前瞻来避免多个<strong>之前,<\ul>如下所示:(?!<strong>.*<strong>.*<\/ul>)

于 2012-09-06T22:02:55.773 回答