正则表达式替换中的奇怪行为

时间:2013-05-24 18:27:29

标签: php regex preg-replace preg-match pcre

我正在为链接系统做一个正则表达式,语法如下:

<a href=":login">Login</a>

这告诉系统该链接应该转换为JS或HTML目标,具体取决于用户的浏览器功能。

是的,所以我的所有后端工作都运行正常,但我注意到我正在用来捕获这些类型链接的常规表达式的一个奇怪问题。当一个动态链接(href =“:)独立(即不在另一个对象旁边)时,它工作正常;但是,如果像

这样的动态链接
<a href=":myLink">

来自

之类的标准链接
<a href="myLink">

然后动态链接不会像它应该的那样被改变。

以下是一些示例代码的键盘链接,用于演示该错误。 http://codepad.org/ZKdm2NkS

请注意,<a href=":first">链接未被修改,但<a href=":second">链接已修改。

我对正则表达式不是很了解所以我确信有更好的方法可以处理事情,而不仅仅是在你转向的地方使用(.*),但就像我说的那样,我愿意接受更好的想法,意见。

1 个答案:

答案 0 :(得分:1)

因为您要替换的唯一内容是“:myLink”部分,您实际上不需要与其余部分匹配...尝试这个:

$html = preg_replace('/href=":([\w]+)"/', 'href="processedLink-$1"', $html);

这只匹配单词(\ w)字符(字母,数字,下划线)