【问题标题】:preg matching all hrefs and srcs in a stringpreg 匹配字符串中的所有 href 和 src
【发布时间】:2012-08-30 00:47:16
【问题描述】:

我正在尝试在这样的字符串中提取所有 href 和 src:

$content = "
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium
voluptatum deleniti Image: <img src = 'http://example.com/check-3.png' /> Link: <a href ='http://example.com/test.xls'>test.xls</a>";

基本上我想要做的是将 example.com 更改为不同的域名(例如 test.com),然后从 hrefs 和 srcs 中提取所有文件名。我能够使用简单的 str_replace 进行域名替换,但现在我被困在尝试提取 href 和 srcs。

这是我尝试使用的:

$regex = "/src=[\"' ]?([^\"' >]+)[\"' ]?[^>]*>.*?href=[\"' ]?([^\"' >]+)[\"' ]?[^>]*>/i";

如果 src (或 href )和 = (例如 )之间没有空格,这似乎可以工作,但如果有空格(例如 ),它就不起作用。我尝试添加空格字符,但预匹配失败。我不想使用像简单的 HTML dom 这样的重型库,此外我认为它不会因为它不是一个合适的 HTML 文档而工作。这是一个来自ckeditor的字符串。

【问题讨论】:

标签: php regex


【解决方案1】:

为什么不在空间上添加量词?

$regex = "/src *= *[\"' ]?([^\"' >]+)[\"' ]?[^>]*>.*?href=[\"' ]?([^\"' >]+)[\"' ]?[^>]*>/i";
               ^  ^

【讨论】:

  • 为什么=后面有空格?不应该是 /src*=* 表示 = 前后有任意数量的空格吗?
  • * 修改前一个字符。 src *= * 表示:“'src '后跟任意数量的空格。后跟 '=' 后跟任意数量的空格。”。 src*=* 表示:“'sr' 后跟任意数量的 'c' 后跟任意数量的 '='s”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
相关资源
最近更新 更多