基本的php正则表达式问题

时间:2009-05-21 05:17:55

标签: php regex

我有一个html文件,我想在这两个标签中找到所有文字:

<div class="articleTitle">
</div> 

我不完全确定如何使用php正则表达式。 (我也知道div里面没有html标签,所以嵌套标签没有问题)

更新:当我尝试给出的解决方案时,我得到这个:警告:preg_match()[function.preg-match]:第29行的未知修饰符'd'

4 个答案:

答案 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);
  1. DIV可以是空的,所以像(。+)这样的pattrns是错误的。
  2. 你使用“m”修饰符 - 内容可以是多行的。
  3. 你应该使用“s”修饰符来匹配点元字符作为换行符。
  4. 只是想知道,如果php中的pattens可以有任何分隔符,为什么要逃避斜线?通常我在这种情况下使用#作为分隔符。
  5. DIV可以包含其他属性和/或空格字符(包括换行符)。
  6. 抱歉,没有时间测试模式好,但似乎是正确的。这无论如何都应该有用。

    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标签中的其他可能属性,那将会更复杂一些。