“你不能用正则表达式解析HTML”为什么?

时间:2012-08-24 13:29:56

标签: php regex html-parsing

我知道我的问题似乎是重复的(duplicate)... 但特别是我不是要解析“真/有效”HTML,它是javascript变量/ HTML标签的一部分,请参阅我的示例:

                <td width="10"></td>
            <td ><div id="combo_rub" style="CURSOR:pointer"></div><input type="hidden" id="rech_cod_cat"  name="rech_cod_cat" value="1"/></td>
            <td ><div id="combo_typ" style="CURSOR:pointer"></div></td>
            <td ><div id="combo_sou_typ" style="CURSOR:pointer"></div></td>

            <script type="text/javascript">
            d_rech_cod_rub       = "101";
            d_rech_cod_typ       = "1";
            d_rech_cod_sou_typ   = "1020121";

            //ComboBox sous_type
            var z_sou_typ=new dhtmlXCombo("combo_sou_typ","rech_cod_sou_typ",160);

所以我在我的代码中想要的是从Javascript部分检索(d_rech_cod_rubd_rech_cod_typd_rech_cod_sou_typ)的值,而不是从HTML中检索...

第二种情况是:

<td><a href="AnnoncesImmobilier.asp?rech_cod_rub=101&amp;rech_cod_typ=1">
<font color="#2154eb">Location (6920)</font></a> </td></tr></table></td></tr>
<tr><td><table width="100%" cellpadding="0" cellspacing="0"><tr>   
<td><a href="AnnoncesImmobilier.asp?rech_cod_rub=101&amp;rech_cod_typ=5"></td>      

同样在这里我需要检索'101'值......

最后,完整的故事:我经常使用PHP的Curl扩展,然后我遇到了类似上面示例的内容......问题是当我使用HTML-Parser时({{3} })我无法完成我的工作,因为它只适用于有效的HTML .. :( 我的问题:有任何解决方案以稳定的方式检索值吗? 如果遇到像我这样的案子,你在做什么?

谢谢你们。

编辑:所以根据大多数答案,使用RegX可以做到这一点......

4 个答案:

答案 0 :(得分:2)

如果您想要的只是那个值,那么就可以很容易地使用正则表达式:

d_rech_cod_rub\s*=\s*"([0-9]+)";

第一个捕获组是你的价值。

答案 1 :(得分:2)

以下正则表达式诀窍

d_rech_cod_[a-z_ ]*= "([0-9]*)";
rech_cod_rub=([0-9]*)

不确定PHP,但您可以使用以下代码对其进行评估:

preg_match($regex, $content, $matches);
print($matches[1]);

答案 2 :(得分:2)

在更具体的答案中,正则表达式无法处理嵌套信息。

例如......

<span>Hello <span>World</span></span>

查找<span>.*<\/span>的正则表达式将返回:

<span>Hello <span>World</span>

我们甚至没有提及尝试使用缺少的标签来处理无效的HTML。

this (loadHTML)这样的东西可能就是你想要的东西。

答案 3 :(得分:1)

我不确定是否可以使用一个正则表达式执行您想要的操作,但当然每个变量使用一个正则表达式。也可以使用strpos函数来解析字符串。这里第二种方法可能是更有效的方法。