我正在尝试编写正则表达式来捕获此字符串:
<td style="white-space:nowrap;">###.##</td>
如果包含正则表达式中的字符串,我甚至无法匹配它!
我正在使用preg_match_all()
,但是,我找不到正确的模式。我在想"white-space:nowrap;"
以某种方式抛弃匹配。任何的想法?谢谢......
答案 0 :(得分:4)
为什么不尝试使用DOM文档呢?然后,您不必担心HTML格式正确。使用Dom Doc集合还可以提高可读性并确保快速性能,因为它是PHP Core的一部分,而不是生活在用户空间中
答案 1 :(得分:2)
当我遇到正则表达式问题时,我喜欢使用以下网站之一实时测试它们:
答案 2 :(得分:1)
你看到了什么警告吗?你必须逃避一些,即td close标签之前的/
。这似乎对我有用:
$string='cow cow cow <td style="white-space:nowrap;">###.##</td> cat cat cat cat';
php > preg_match_all('/<td style="white-space:nowrap;">###\.##<\/td>/',$string,$result);
php > var_dump($result);
array(1) {
[0]=>
array(1) {
[0]=>
string(43) "<td style="white-space:nowrap;">###.##</td>"
}
}
答案 3 :(得分:1)
您是否知道任何PHP的preg_
函数的正则表达式参数必须是双重分隔的?例如:
preg_match_all(`'/foo/'`, $target, $results)
'...'
是字符串分隔符,/.../
是 regex 分隔符,实际的正则表达式是foo
。正则表达式分隔符不必是斜杠,它们只需要匹配;一些受欢迎的选择是#...#
,%...%
和~...~
。它们也可以是平衡的包围字符对,例如{...}
,(...)
,[...]
和<...>
;那些不太受欢迎,并且有充分的理由。
如果省略正则表达式分隔符,则正则表达式编译阶段可能会失败,错误消息可能没有意义。例如,此代码:
preg_match_all('<td style="white-space:nowrap;">###.##</td>', $s, $m)
...会生成此消息:
Unknown modifier '#'
它尝试使用第一对尖括号作为正则表达式分隔符,并且>
后面的任何内容作为正则表达式修饰符(例如,i
表示不区分大小写,m
表示多行)。要解决这个问题,你可以添加真正的正则表达式分隔符,如下所示:
preg_match_all('%<td style="white-space:nowrap;">###\.##</td>%i', $s, $m)
分隔符的选择取决于个人喜好和便利性。如果我使用了#
或/
,我将不得不在实际的正则表达式中逃避这些字符。我逃脱了.
因为它是一个正则表达式元字符。最后,我添加了i
修饰符来演示修饰符的使用,因为HTML 不是区分大小写。