";您可以';t用正则表达式“t”解析HTML;为什么


"You can't parse HTML with regex" WHY?

我知道我的问题好像重复了。。。但特别的是,我并没有试图解析"True/Valid"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);

因此,我希望在我的代码PHP中从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解析器时(http://simplehtmldom.sourceforge.net/)我不能用它来完成我的工作,因为它只能用有效的HTML..:(我的问题是:有什么解决方案可以以稳定的方式检索值?如果你遇到像我这样的案子,你在做什么?

谢谢大家。

编辑:所以根据大多数答案,使用RegX可以完成任务。。。

以下正则表达式实现

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

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

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

如果你只想要这个值,那么使用正则表达式就很容易了:

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

第一个捕获组是您的价值所在。

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

例如。。。

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

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

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

我们甚至不会提及试图处理带有缺失标签的无效HTML。

像这样的东西(loadHTML)可能正是你想要的。

我不确定是否可以用一个正则表达式来做你想做的事情,但每个变量用一个规则表达式肯定是可能的。还可以使用strpos函数来解析字符串。在这里,第二种方法可能是更有效的方法。