2008-10-27 45 views
7

我的后端有一个wysiwyg编辑器,它正在跳出我写的第一个正则表达式。这是在PHP4中,使用preg_replace()。我正在捕获URI和链接的文本。正则表达式 - 匹配所有可选属性的锚点

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

客户希望所有外部链接在新窗口中打开,所以这是我用的是找到所有(希望)外部链接,但离开内部,页锚链接表达等

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

我该怎么做?

回答

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"