【问题标题】:how to match until the first match in regex?如何匹配直到正则表达式中的第一个匹配?
【发布时间】:2014-11-30 22:10:18
【问题描述】:

正如您所知道的,当您编写正则表达式代码并希望它一直运行到 php 的页面源中的某些内容(匹配)时,它会匹配页面中该字符或匹配项的最后一个,这里是问题我需要将它与第一个字符匹配并避免它转到最后一个甚至第二个字符,这是我的一段正则表达式代码

#<a href="/lyrics/[\s\S]{1,}/[\s\S]{1,}.html#

我需要它来匹配页面中的第一个 .html,就在 a 标签的 href 中, 但它匹配页面中的最后一个 .html 并将其放入我的数组的 0 部分 tnx 的帮助 ;)

【问题讨论】:

标签: php regex web-crawler


【解决方案1】:

我需要它来匹配页面中的第一个 .html,就在 a 标签中的 href ...

除非我误解了某些东西,否则您是否考虑过使用 DOM 而不是正则表达式?

$doc = DOMDocument::loadHTML('
    <a href="/lyrics/foo/foo.html">...</a>
    <a href="/lyrics/bar/bar.html">...</a>
    <a href="/lyrics/foobar/foobar.html">...</a>
    <a href="/lyrics/foobaz/foobaz.html">...</a>
    <a href="/lyrics/baz/baz.html">...</a>
');

$tag = $doc->getElementsByTagName('a')->item(0);
echo $tag->getAttribute('href'); //=> "/lyrics/foo/foo.html"

【讨论】:

  • 我不熟悉 dom ,但是在这个来源中,当我匹配正则表达式时,我在 href 中有链接到 a 标记,但它没有以页面中的第一个 .html 结尾,并且当我说直到正则表达式中的 .html ,它会匹配页面源代码中的最后一个 .html ,我想匹配作为链接末尾的第一个并开始第二个并再次与第一个匹配.html 之后,我希望所有链接都匹配在一个数组中,但是当我使用这个正则表达式时,它只匹配页面中的最后一个 .html 并将整个匹配项放在数组的 0 部分
猜你喜欢
  • 2022-12-17
  • 2012-05-09
  • 2022-11-02
  • 2010-11-26
  • 2014-06-30
  • 2022-01-11
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多