【问题标题】:Regex: parsing the link that doesn't contain img in anchor正则表达式:解析锚点中不包含 img 的链接
【发布时间】:2012-05-01 12:44:15
【问题描述】:

我正在尝试解析一个普通链接,但有时除了该链接之外,还有一个类似的链接,而不是文本包含图像。

我一直在使用这种模式:"#_blank\">(.*?)</a>#is,但这也与锚点中包含图像的链接匹配。

我怎样才能只解析不包含图像的那些?

【问题讨论】:

  • 你能发布一些示例 html 来匹配吗?
  • 您应该 a) 提供更具体的信息(例如,哪个输入无效)和 b) 使用 HTML 解析器。
  • 请贴出与问题相关的代码。您可以通过编辑自己的问题并将其添加到问题正文中来做到这一点。它将帮助我们帮助您。

标签: php regex parsing preg-match regular-language


【解决方案1】:

如果您不想在 a 标签中匹配任何标签,请尝试使用此方法从页面上的所有 a 标签中获取内部 html:

#<a [^>]+>([^<]+)</a>#si

根据您的评论...

为了避免怪物正则表达式,我可能会做的是使用上面的然后这样做:

$output = strip_tags( $match[1], '<b><i><u>' );

添加其他允许的标签来品尝。这种方法还可以确保最终字符串中没有讨厌的标签。

【讨论】:

  • 只有图片,我不在乎是否有粗体或其他类似的标签,我想你的模式可以调整,我会尝试但我不太擅长正则表达式。
【解决方案2】:

&lt;a href=".*?"&gt;(?!&lt;img.*?&gt;).*?&lt;/a&gt;

http://regexr.com?30n1q

这个怎么样?

【讨论】:

  • 如果href之前有一个类怎么办?如果href是大写的怎么办?如果 href 的右引号和右括号之间有空格怎么办?
  • @HappyTimeGopher 不必如此防御。他甚至没有提出这样的具体要求。
  • 只是想说明问题。通常,当有人发布问题时,他们并不了解所有后果,因此他们无法询问边缘情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多