正则表达式匹配单词,除非它是网址的一部分

时间:2014-07-21 13:45:34

标签: c# regex c#-4.0

我试图匹配单词的所有出现...除非它们出现在网址中,否则我不想匹配它。 让我们假设我试图匹配“' co'

should match: cots and co 
should not match: not http://me.co.uk
should match: last of my co.

我试图用something like this背后的负面看法:

(?!http)\bco\b

\b确保co中的cots不匹配,但仍匹配网址中的co

(?!http).*\bco\b // This matches the whole sentence until the url
(?!http.*)\bco\b // this doesn't match anything

不确定背后的消极看法是否可行,在我的情况下,可以安全地假设所有网址都以http://开头,这样我就可以尝试开始。

那么除了url之外,我如何匹配co到处?

编辑:

我想匹配单词,而不是整个句子 我在c#

上这样做了

编辑2: 我尝试做的是将所有非网址关键字转换为我博客上的内部网址。

我现在得到了什么:

string orig = "co and http://me.co.uk";
string pros = Regex.Replace(orig, @"https?://\S*?co|\bco\b", m => string.Format("<a href='/co'>co</a>"));

(使用下面的答案)

目前这给了我

<a href='/co'>co</a> and <a href='/co'>co</a>.uk

和我想要的是

<a href='/co'>co</a> and http://me.co.uk

由于

2 个答案:

答案 0 :(得分:1)

您可以在C#中使用这样的正则表达式:

(?<!https?://\S*)\bco\b

答案 1 :(得分:0)

试试这个:

^(?!http\S+\.co(\.|\?|$)).*\b(co)\b

匹配位于第1组 - 请参阅demo对照这些输入:

cots and co 
last of my co.
http://me.co.uk
http://me.example.co
http://me.example.co?foo=bar