首页 文章

如何将整个字符串与正则表达式匹配?

提问于
浏览 96
59

我需要一个只能找到整个字符串与我的查询匹配的匹配的正则表达式 .

例如,如果我搜索名为“Red October”的电影,我只想匹配那个确切的 Headers (不区分大小写),但不匹配“The Hunt For Red October”等 Headers . 不太确定我知道怎么做 . 谁知道?

谢谢!

8 回答

  • 85

    你需要将你的正则表达式括在 ^ (字符串的开头)和 $ (字符串的结尾):

    ^Red October$
    
  • 29

    请尝试以下正则表达式:

    ^Red October$
    

    默认情况下,正则表达式区分大小写 . ^ 标记匹配文本的开头, $ 结束 .

  • 16

    通常,使用默认设置, ^$ 锚点是确保正则表达式匹配整个字符串的好方法 .

    但有几点需要注意:

    如果你的正则表达式中有替换,请确保将正则表达式括在非捕获组中,然后用 ^$ 包围它:

    ^foo|bar$
    

    当然不同于

    ^(?:foo|bar)$
    

    此外,如果设置了某些选项, ^$ 可以采用不同的含义(行的开头/结尾而不是字符串的开头/结尾) . 在支持正则表达式的文本编辑器中,这通常是默认行为 . 在某些语言中,尤其是Ruby,甚至无法关闭此行为 .

    因此,有另一组锚定保证仅匹配整个字符串的开头/结尾:

    \A 匹配字符串的开头 .

    \Z 在字符串末尾或最后一个换行符之前匹配 .

    \z 匹配字符串的最后 .

    但并非所有语言都支持这些锚点,尤其是JavaScript .

  • 8

    我知道回答这个问题可能有点晚了,但也许对其他人来说会很方便 .

    最简单的方法:

    var someString = "...";
    var someRegex = "...";
    var match = Regex.Match(someString , someRegex );
    if(match.Success && match.Value.Length == someString.Length){
        //pass
    } else {
        //fail
    }
    
  • 3

    对不起,但有点不清楚 .

    从我读到的,你想做简单的字符串比较 . 你不需要正则表达式 .

    string myTest = "Red October";
    bool isMatch = (myTest.ToLower() == "Red October".ToLower());
    Console.WriteLine(isMatch);
    isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower());
    
  • 1

    使用 ^$ 修饰符来表示正则表达式模式相对于字符串开头和结尾的位置:

    Regex.Match("Red October", "^Red October$"); // pass
    Regex.Match("The Hunt for Red October", "^Red October$"); // fail
    
  • 0

    匹配整个字符串可以使用 ^$ 完成,如前面的答案中所述 .

    为了使正则表达式不区分大小写,您可以实现涉及字符类的hack . 很多角色类 .

    ^[Rr][Ee][Dd] [Oo][Cc][Tt][Oo][Bb][Ee][Rr]$
    
  • -1

    你可以这样做,例如,如果我只想在字符串中捕获一次字母减去a,可以使用myRegex.IsMatch()进行检查

    ^ [^E] [E] {1} [^E] $

相关问题