我有一个html文件,我想在这两个标签中找到所有文字:
<div class="articleTitle">
</div>
我不完全确定如何使用php正则表达式。 (我也知道div里面没有html标签,所以嵌套标签没有问题)
更新:当我尝试给出的解决方案时,我得到这个:警告:preg_match()[function.preg-match]:第29行的未知修饰符'd'
答案 0 :(得分:4)
preg_match('/<div class="articleTitle">(.*?)<\/div>/i', $source, $matches);
print_r($matches);
这是RegexBuddy的“Explination”:
<div class="articleTitle">(.*?)</div>
Options: case insensitive
Match the characters “<div class="articleTitle">” literally «<div class="articleTitle">»
Match the regular expression below and capture its match into backreference number 1 «(.*?)»
Match any single character that is not a line break character «.*?»
Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
Match the characters “</div>” literally «</div>»
Created with RegexBuddy
(。*?)将捕获之前的内容,直到它之后的内容,并且它将放入$ matches var中。
我认为HTML将在$ source var。
中我建议您查看RegexBuddy,它是39.95(美元),但值得每一分钱。它可以帮助您在大多数主要的RegEx实施中构建您的RegEx,它可以帮助您学习RegEx
答案 1 :(得分:2)
错误答案!
preg_match('#<div\s+[^>]*class="articleTitle"[^>]*>(.*)</\s*div>#ims', $str, $matches);
抱歉,没有时间测试模式好,但似乎是正确的。这无论如何都应该有用。
PS:而且,GONeale,关于贪婪 - 模式一定是贪婪的,没有修饰语“U”就很贪婪。答案 2 :(得分:0)
这会更正确,因为其他解决方案会匹配&lt; div class =“articleTitle”&gt;&lt; div /&gt;本身,这可能是不受欢迎的?
preg_match('<div class="articleTitle">(.+?)</div>', $test_string, $matches);
答案 3 :(得分:0)
'/<div class="articleTitle">(.*?)<\/div>/'
通常会奏效;但是,如果您需要考虑div标签中的其他可能属性,那将会更复杂一些。