我的后端有一个wysiwyg编辑器,它正在绊倒我写的第一个正则表达式。这是在PHP4中,使用preg_replace()
。我正在捕获URI和链接文本。
@<a\shref=\"http[s]?://([^\"]*)\"[]>(.*)<\/a>@siU
客户希望所有外部链接在新窗口中打开,这是我用来查找所有(希望)外部链接的表达式,但保留内部,页面锚链接等
如果用户在链接上选择粗体,我意识到wysiwyg编辑器还会添加style="font-weight: bold"
。我最近才开始学习正则表达式,所以我不确定如何解决这个问题。
我该怎么做?
答案 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"