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

php正则表达式-仅在两个因素之间匹配,php,html,regex,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</

我遇到的情况是,当满足以下条件时,我只需要更改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做正则表达式是在出卖你的灵魂,但我在这个解析器方面已经太高级了,而且要花很长时间才能把它完全抛在脑后

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

您可以执行以下正则表达式:

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

/

这里有一个regexp可以帮助您

<a href="(?!http:\/\/)(?!javascript:)[\w\s,/-]+(?!.html?)\.\w+">.+?<\/a>
+?
我用底片来执行你的规则

(?!http:\/\/)
将确保链接不会以
http://
开头<代码>(?!javascript:)
与javascript规则类似

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


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

为什么不在页面加载后使用javascript,而不是在页面服务之前使用服务器端?因为它不是显示在页面上,而是解析到对象中。这很难解释,但是没有客户端与项目的交互。
/
不是一个特殊的正则表达式字符(如果您使用它们作为分隔符,您只需要转义它们),但是
是,您需要转义它。它也可以工作,除了它需要所有的东西,直到tagI代表您之前,但是我还不够。@Axon你想匹配哪个部分?在href中的“”和结尾>与之间的内容是什么