【问题标题】:Regex match word except when it's a part of a url正则表达式匹配单词,除非它是 url 的一部分
【发布时间】:2014-07-21 13:45:34
【问题描述】:

我正在尝试匹配一个单词的所有出现...除非它们出现在一个 url 中,然后我不想匹配它。 假设我正在尝试匹配单词“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 确保cots 中的co 不匹配,但仍与网址中的co 匹配。

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

不确定是否要采取消极的态度,就我而言,可以安全地假设所有 url 都以 http:// 开头,所以这就是我要开始的地方。

那么我将如何在除 url 之外的任何地方匹配 co

编辑:

我只想匹配单词,而不是整个句子
我在 c# 上这样做

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

我现在得到了什么:

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

谢谢

【问题讨论】:

  • 您是要匹配包含字符串的单词还是整行?
  • 您使用哪种语言/工具进行正则表达式?
  • Negative lookbehinds 是这样的:(?&lt;! ) 你正在使用负前瞻!...
  • @Unihedron 啊!我一定是看错了,会回来更正的,谢谢

标签: c# regex c#-4.0


【解决方案1】:

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

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

【讨论】:

  • 嗨,这与您链接的在线演示中的 url 不匹配,但由于某种原因,在我的 c# 上它匹配。演示中的~ 是什么意思?
  • 啊,好像也和url匹配了,看看这里的替换栏:regex101.com/r/dH3rQ0/3
  • 太棒了,这行得通,谢谢!我正在尝试使用(?&lt;!https?://).*\bco\b .. 它从一开始就选择了所有内容.. 有点接近,但没有雪茄!
  • 不客气,很高兴它成功了。仅由于 C# 正则表达式,它允许 可变长度向后查看
【解决方案2】:

试试这个:

^(?!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

【讨论】:

  • 嗨,我可能遗漏了一些东西,但这会切断最后一场比赛的所有文字!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 2020-01-02
  • 2018-02-10
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多