【问题标题】:preg_match_all expressionpreg_match_all 表达式
【发布时间】:2010-10-18 16:28:45
【问题描述】:

我正在尝试使用 prag_match 和 perl 模式从图像标签中提取 src 值。我不知道我在哪里做错了,但是我也得到了不需要的部分。这是我的模式的样子 -

preg_match_all('#src="http.+"#',$imagetag,$temp);

$imagetag = "<img src="http://....." alt="build4.jpg" title="build4.jpg" width="320" height="240" />"

我没有返回 src="..." 部分,而是获得了整个属性 - src=".." alt=".." title=".." width=".." height=" ..";我的模式有问题。如果有人能指出错误,我将不胜感激。

【问题讨论】:

  • 呃,我不认为那是 Perl ......看起来更像 PHP。使用 Perl 兼容的正则表达式。
  • 请考虑使用适当的 DOM 解析器而不是基于正则表达式的抓取工具来解析 HTML。
  • @Bolt:对不起,我的错。它是与 perl 兼容的正则表达式的 php。 @Noufal:是否会因为我需要创建对象和传递标签的开销而使我的脚本变慢?因为我最多只需要处理 4 个标签。

标签: php regex


【解决方案1】:

您需要使用.+? 代替.+ 来使您的模式不贪婪:

preg_match_all('#src="http.+?"#',$imagetag,$temp);

【讨论】:

  • 非常感谢;它有效。如果您不介意我问,如何添加?改变整个结果?我的意思是,我认为将 .+ 括在引号内会将返回结果限制为具有 src="alphanumeric/symbol" 的结果;在我看来,它认为最后一个属性的右引号与我的模式中的引号匹配并考虑所有其余属性与模式 .+. 匹配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
相关资源
最近更新 更多