正则表达式 - 匹配具有可选属性的所有锚点

时间:2008-10-27 01:07:58

标签: php regex

我的后端有一个wysiwyg编辑器,它正在绊倒我写的第一个正则表达式。这是在PHP4中,使用preg_replace()。我正在捕获URI和链接文本。

@<a\shref=\"http[s]?://([^\"]*)\"[]>(.*)<\/a>@siU

客户希望所有外部链接在新窗口中打开,这是我用来查找所有(希望)外部链接的表达式,但保留内部,页面锚链接等

如果用户在链接上选择粗体,我意识到wysiwyg编辑器还会添加style="font-weight: bold"。我最近才开始学习正则表达式,所以我不确定如何解决这个问题。

我该怎么做?

1 个答案:

答案 0 :(得分:7)

这应该匹配好了:

/<a\s+([^>]*)href="https?:\/\/([^"]*)"(.*?)>(.*?)<\/a>/

这里有用的是懒惰的比赛。 *?这意味着它只会与绝对需要的匹配,而不是常规匹配,这是贪婪的。

使用以下文字进行演示:

  

a b c d a b c d

这些正则表达式会产生不同的结果:

/a.*c/    selects: "a b c d a b c"
/a.*?c/   selects: "a b c"