Php 正则表达式替换中的奇怪行为
我正在为链接系统编写一个正则表达式,语法如下所示:Php 正则表达式替换中的奇怪行为,php,regex,preg-replace,preg-match,pcre,Php,Regex,Preg Replace,Preg Match,Pcre,我正在为链接系统编写一个正则表达式,语法如下所示: <a href=":login">Login</a> 这会告诉系统,此链接应根据用户的浏览器功能转换为JS或HTML目标 是的,所以我所有的后端工作都很好,但是我注意到我用来捕获这些类型链接的常规表达式有一个奇怪的问题。当动态链接(href=“:)单独存在(即不在另一个对象旁边)时,它工作正常;但是,如果动态链接 <a href=":myLink"> <a href="myLink">
<a href=":login">Login</a>
这会告诉系统,此链接应根据用户的浏览器功能转换为JS或HTML目标
是的,所以我所有的后端工作都很好,但是我注意到我用来捕获这些类型链接的常规表达式有一个奇怪的问题。当动态链接(href=“:)单独存在(即不在另一个对象旁边)时,它工作正常;但是,如果动态链接
<a href=":myLink">
<a href="myLink">
请注意,
链接没有被修改,但是
链接被修改
我对regexp不是很在行,所以我相信有更好的方法来处理事情,而不是在你的任何地方都使用(.*)
,但正如我所说的,我愿意接受更好的想法和意见。因为你唯一要替换的是“:myLink”部分,你不需要与其他部分匹配……试试这个:
$html = preg_replace('/href=":([\w]+)"/', 'href="processedLink-$1"', $html);
这是只匹配单词(\w)字符(字母、数字、下划线)为什么在这里使用正则表达式而不是解析DOM?Ungreedy正则表达式有点帮助,Mike建议使用DOM
解析器帮助更多。