这就是我现在所拥有的。
<h2>Information</h2>\n +<p>(.*)<br />|</p>
^ that is a tab space, didn't know if there was
a better way to represent one or more (it seems to work)
我试图匹配'bla bla'。文本,但我当前的正则表达式不太有效,它将匹配大部分行,但我希望它匹配第一个
<h2>Information</h2>
<p>bla bla.<br /><br /><a href="http://www.google.com">google</a><br />
或
<h2>Information</h2>
<p>bla bla.</p> other code...
哦,我的PHP代码:
preg_match('#h2>Information</h2>\n +<p>(.*)<br />|</p>#', $result, $postMessage);
答案 0 :(得分:6)
不要使用正则表达式来解析HTML。 PHP提供了可用于此目的的DOMDocument。
说你的正则表达式有一些错误:
通过这些更改,它看起来像这样:
<h2>.*?</h2>\n\t+<p>.*?(<br />|</p>)
你的正则表达也非常脆弱。例如,如果输入包含空格而不是制表符,或者行结尾是Windows样式,则正则表达式将失败。使用适当的HTML解析器将提供更强大的解决方案。
答案 1 :(得分:2)
使用\s
匹配任何空白字符(包括空格,制表符,换行符等),例如
preg_match('#<h2>header</h2>\s*<p>(.*)<br />|</p>#', $result, $postMessage);
但是,如前所述,不要使用正则表达式来解析HTML。
答案 2 :(得分:1)
答案 3 :(得分:1)
尝试使用non-greedy
取代(.*?)
(.*)