与正则表达式匹配的链接

时间:2013-04-03 01:12:38

标签: php regex

我希望将链接与正则表达式匹配,直到第一个空格或<出现。 我试过这个正则表达式

\b(((http|ftp)(.)?\:\/\/)?(www\.)?example\.com([^\s|<]+)?)\b

但这个正则表达式的问题在于它也匹配example.com.au。 所以我想要匹配

example.com                      // match
example.com/somelink/link        // match

example.com.au                   // do not match
example.com.au/somelink/link     // do not match

匹配到第一个空格或<出现

2 个答案:

答案 0 :(得分:1)

这是一个与http://example.com/whatever匹配但不与http://example.com.au/whatever匹配的解决方案。

/\b(((http|ftp)(.)?:\/\/)?(www\.)?example\.com(?!\.[\w\d])(\/[^\s<]*)?)\b/

对此文本进行了测试:

Match http://example.com/ but not http://example.com.au
This is a sentence about http://example.com/.
http://example.com<
http://example.com/asdf.asdf.asdf/ asdf
http://example.computer

它使用负向前瞻来明确排除example.com后跟\.[\w\d]

答案 1 :(得分:0)

告诉它你不想在.com

之后匹配任何点
\b(((http|ftp)(.)?\:\/\/)?(www\.)?example\.com([^\s|<|\.]+)?)\b

或者更聪明地告诉你,如果之后有什么东西,你希望在.com之后出现正斜线.com

\b(((http|ftp)(.)?\:\/\/)?(www\.)?example\.com(\/[^\s|<]+)?)\b