php正则表达式-仅在两个因素之间匹配
我遇到的情况是,当满足以下条件时,我只需要更改HTML字符串: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</
- 它必须在两个标签之间
- 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中的“”和结尾>与之间的内容是什么