2013-04-03 140 views
0

我想匹配鏈接與正則表達式,直到第一空間或<發生。 我想這正則表達式匹配鏈接與正則表達式

\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 

比賽,直到第一個空格或<發生

+1

所以你特別想匹配'example.com'? 'example.com.au'是一個有效的主機。 –

+0

@KennethK。是的,我想匹配'example.com',但不匹配'example.com.au'也匹配每一件事物,直到第一個空間出現像這樣的'example.com' –

回答

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]

+0

看起來很漂亮。讓我先試試它。 –

+0

非常感謝,我努力想出來。 –

0

只要告訴它你不想以後.COM匹配任何點

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

或者得到更多的聰明,並告訴它你期望一個正斜槓後.com如果有任何東西.com

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

'.com'後面是沒有點,但想要匹配所有內容'.com'直到第一個空間出現。是的,期待一個正斜槓 –

+0

我提到的第二個應該適合你,那就好了。 – bubba

+0

上面的正則表達式第一個仍然與'example.com.au'中的'example.com'相匹配。 –