这个正则表达式的负面断言是什么?

时间:2013-02-04 09:46:26

标签: php regex

我正在尝试匹配以下内容:

  • 此:

    HIGH SCHOOL WRESTLING NOTEBOOK: A surge at Delaware Valley, team rankings shakeup and more.
    
  • 有了这个:

    <pre>
      <div class="sum">
        <div class="photo_gutter">
          <div class="photo">
            <a href="http://media.lehighvalleylive.com/brad-wilson/photo/jaryd-flank-b30e919c41bc86b2.jpg">
              <img src="http://media.lehighvalleylive.com/brad-wilson/photo/jaryd-flank-b30e919c41bc86b2.jpg" alt="" title="" width="200" border="0"/>
            </a>
          </div>
        </div>
      </div>
      HIGH SCHOOL WRESTLING NOTEBOOK: A surge at Delaware Valley, team rankings shakeup and more.
    </pre>
    

到目前为止我所拥有的是/<.*>\s/i,但我需要与此相反。有人能帮助我吗?

2 个答案:

答案 0 :(得分:2)

不要使用正则表达式来解析HTML,而是使用PHP Domdocument

答案 1 :(得分:0)

不建议使用正则表达式来解析HTML,但因为这是一项简单的任务(可能是为了学习正则表达式):

你有这个:/<.*>\s/i

1- i修饰符在此处不执行任何操作,因为您没有使用任何在regex表达式中区分大小写的字符。即:/apple/i有道理,因为你想找到Apple/\w+/i不执行任何操作,因为\w包含小写和大写字符。

2-如果您正在解析HTML,最好不要假设或使用任何\s,除非您在标记内。

3-如果要将正则表达式的一部分捕获到变量中,则必须使用()。即:/(\w+) Apple/解析Red Apple会在Red$1函数的匹配数组中为您提供preg_match()

现在我该怎么做:

首先,我会从输入字符串中删除任何\r\n\n。只有一行文本,正则表达式更好用。您可以使用str_replace()

执行此操作

如果您想获得不在<>内的任何内容:

/>(.*?)</

如果您想获取某个标签内的文字,例如<div>this one</div>

/<div>(.*?)<\/div>/

?字符使.*匹配非贪婪,因此它将获得与该模式匹配的最少字符数。

希望它有所帮助。