php regex preg_match找到多个值,然后是Preg_match_all

时间:2016-02-23 02:49:43

标签: php html-parsing preg-match preg-match-all

我必须通过php regex在HTML页面中找到特定标签之间的值。但我想如果HTML页面包含多个值,那么执行preg_match_all否则什么都不做。

例如,如果preg_match在HTML中找到4个值,则在下一阶段执行preg_match_all,否则如果preg_match只找到1个标记值,则不执行任何操作。

<td class"page"> 
<span class="my-tag">value1</span>
<span class="my-tag">value2</span>
<span class="my-tag">value3</span>
<span class="my-tag">value4</span>
</td>
preg_match('/<td class"page">(.*?)<\/td>/s';)
now do preg_match_all in next phase because preg_match find 4 values

preg_match_all('|\<span class="my-tag"\>(.*?)\</span\>|', $html, $string);

and if HTML contain only 1 value like this 
<td class"page"> 
<span class="my-tag">value1</span>
</td>

因此,如果HTML只包含1个值,则不执行任何操作

2 个答案:

答案 0 :(得分:0)

基本上,从你的preg_match开始,你会得到一个字符串,如下所示:

Array
(
    [0] => <td class="page"> 
<span class="my-tag">value1</span>
<span class="my-tag">value2</span>
<span class="my-tag">value3</span>
<span class="my-tag">value4</span>
</td>
    [1] =>  
<span class="my-tag">value1</span>
<span class="my-tag">value2</span>
<span class="my-tag">value3</span>
<span class="my-tag">value4</span>

)

有了这个,我们可以继续进行比赛 - 不管它是否只找到一场比赛或多场比赛。 (因为它不会伤害任何东西以匹配一个项目或四个项目,我建议在您的代码中移动逻辑。)然后我们可以计算它找到的数量并将其存储在名为{的变量中{1}}。

$count

从那里开始,它只是一个简单的if / else语句来做你想做的事。

这是一个有效的演示:

http://ideone.com/SiPiOx

答案 1 :(得分:0)

您可以在一个正则表达式中使用括号中的管道字符组合多个模式:

preg_match('/(cats?|dogs?|re.*tion)/', $string, $matches);