php正则表达式 - 仅在两个因素之间匹配

时间:2014-04-07 11:42:52

标签: php html regex

我有一种情况,我只需要在满足以下条件时改变HTML字符串:

  • 必须在标签之间
  • href无法以http://或javascript:
  • 开头
  • href不能以.html或.htm
  • 结尾

现在的问题是,这必须是一个大字符串中的全局正则表达式搜索,它可以在一个字符串中找到多个解决方案。

例如:

<a href="http://www.google.be">Google</a>
<a href="javascript:node(133)">Go there</a>

应该被忽略

<a href="testpage.html">Test</a>
<a href="testpage2.htm">Test page 2</a>

也应该被忽略,但是

<a href="file.mp3">File</a>
<a href="stuff.flv">Stuff</a>
应该抓住

我知道用HTML制作正则表达式正在将你的灵魂卖给魔鬼,但我已经在这个解析器中太高级了,并且我将花费太长时间完全抛弃它。

因此有一种方法可以在开始和结束时检查字符串,而不知道字符串本身是在开始还是在结尾(因此使用^或$几乎是不可能的)。 / p>

2 个答案:

答案 0 :(得分:1)

你可以做这个正则表达式:

/<a href="(?!.*?http|javascript)(?!.*?html?)(?=.*?>)(.+?)<\/\w+>/

Demo

答案 1 :(得分:1)

这是一个可以帮助你的正则表达式。

<a href="(?!http:\/\/)(?!javascript:)[\w\s,/-]+(?!.html?)\.\w+">.+?<\/a>

我使用负面预测来强制执行你的规则。

(?!http:\/\/)确保链接不以http://开头。 (?!javascript:)与javascript规则类似。

然后,它控制路径的结束,如果以htm或html结束,则负向前瞻将确保字符串不匹配。

您可能希望完成[\w\s,/-]部分,该部分与文件的路径和名称相匹配。我允许使用字母数字字符-,/_,随意添加您需要的内容。