【问题标题】:Regular Expression PHP regex issue in a specific scenario特定场景中的正则表达式 PHP regex 问题
【发布时间】:2014-07-16 11:05:31
【问题描述】:

有点问题。我正在尝试使用 preg_match_all 但有些正则表达式不适用于其中一种情况。

<tr>
    <td class="FieldTitle" valign="top">EAN code:</td>
    <td class="Field" valign="top">3838942897078</td>

</tr>

上面的代码是在变量$html中

$table_html = $html;
preg_match_all("'EAN code:</td>\s*<td class=\"Field\" valign=\"top\">(.*?)</td>'si",$table_html,$extract);
$ean = $extract[1][0];
return $ean;

这将返回 3838942897078。这是正确的,但不同场景的相同代码给出了 $extract 的 var_dump 的空数组。这确实意味着我没有找到任何匹配项。

<div class="Field"><span class="Title">Dimensions of the product (W&#215;H&#215;D): </span>60 &#215; 152,4 &#215; 64 cm</div>

以上是在$html中

以下代码:

$table_html = $html;
preg_match_all("'Dimensions of the product (W&#215;H&#215;D):</span>(.*?)</div>'si",$table_html,$extract);
var_dump($extract);

这表明在转储中该数组为空。有人可以对这个问题有所了解。我已经尝试过 preg_match 和 preg_match_all 都没有运气。非常感谢您的帮助。提前致谢

【问题讨论】:

  • 停止使用正则表达式解析 HTML。使用DOM parser
  • 您为什么希望它们匹配?你知道你的正则表达式匹配什么吗?您还知道使用适当的 HTML 解析器会更好吗?
  • 尝试为多行添加m修饰符到正则表达式(...'si...'sim)。
  • 大家好...感谢您的评论。好吧,我是解析的 N00b。昨天在 DOM 上经过近 5 小时的反复试验。我确实放弃了缺乏清晰的文档来通过。并建议一个好的基础教程?

标签: php regex preg-match preg-match-all


【解决方案1】:

这对我有用:

$table_html = $html;
preg_match_all("'Dimensions of the product \(W&#215;H&#215;D\): </span>(.*?)</div>'si",$table_html,$extract);
var_dump($extract);

您需要使用反斜杠 \ 转义 W&amp;#215;H&amp;#215;D 周围的括号。

正如 Sergey 所说,您的模式中还有一个 &lt;/td&gt;,应将其替换为一个空格以匹配您的 HTML 字符串。

【讨论】:

  • 感谢@Zougen 的回复。好吧 只是我在尝试标记的不同部分。但是正如您所指定的,真正的问题是必须转义的括号。工作得很好。非常感谢。非常感谢。谢谢。
猜你喜欢
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 2017-03-18
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多