代码之家  ›  专栏  ›  技术社区  ›  Alexander Beletsky

正则表达式匹配带+(加号)的单词

  •  10
  • Alexander Beletsky  · 技术社区  · 14 年前

    我已经花了一些时间,但仍然要解决这个问题。我需要正则表达式,它能够匹配字符串中带有符号的单词(如c++)。

    我用过 /\bword\b/ /\bC\+\+\b/ 只是不起作用。它的一些工作原理与加号在它的错误。

    我需要一个正则表达式来检测输入字符串中是否包含c++单词。像这样的输入,

    "c++ developer"
    "using c++ language" 
    

    ps.使用C#,.Net正则表达式匹配功能。

    谢谢你的帮助!

    5 回复  |  直到 14 年前
        1
  •  17
  •   kennytm    14 年前

    + 是一个特殊的角色所以你需要逃避它

    \bC\+\+(?!\w)
    

    请注意,我们不能使用 \b 因为 + 不是单词字符。

        2
  •  5
  •   Jakob Borg    14 年前

    问题不在于加号字符,也不在于转义是否正确,而在于 \b 顺序。它表示单词边界,即单词字符(字母数字)和其他字符之间的点。Plus不是单词字符,所以 \b类 为了匹配,需要在最后一个加号后面直接有一个单词字符。

    \bC\+\+\b \bC\+\+\s

        3
  •  2
  •   Viktor Stískala    14 年前

    \ . 同样的规则也适用于这些字符: \, *, +, ?, |, {, [, (,), ^, $,., #, 和空白

    更新:问题出在 \b 序列

        4
  •  0
  •   Toto    14 年前

    + 你已经正确逃脱了但是 \b 这是一个零长度字符,它匹配发生在单词之间的单词边界 \w 和非文字 \W

    C (大写)带 c++ (小写)。为此,必须将regex改为 /\bc\+\+/ 或者使用 i 匹配不区分大小写的修饰符: /\bc\+\+/i

        5
  •  0
  •   Wiktor Stribiżew    6 年前

    如果你想匹配 c++ 在非单词字符(字母、数字和下划线以外的字符)之间,可以使用

    \bc\+\+\B
    

    regex demo 哪里 \b 是一个 word boundary \B

    var pattern = @"\bc\+\+\B";
    

    你一定要记住 \b类 / \B类 \b类 \B类

    如果动态构建模式,很难依赖单词边界 \b类 图案。

    使用 (?<!\w) (?!\w) 取而代之的是lookarounds,它们总是匹配一个没有紧跟在前面/后面的单词char:

    var pattern = $@"(?<!w){Regex.Escape(word)}(?!\w)";
    

    var pattern = $@"(?<!S){Regex.Escape(word)}(?!\S)";