C# 正则表达式匹配特殊字符

C# 正则表达式匹配特殊字符,c#,.net,regex,C#,.net,Regex,我跟在后面 当我尝试测试正则表达式时(方法dump来自linqpad,用于在控制台上显示它): 它应该匹配一个以“a”开头的单词,并且在单词末尾有x个字母数字字符 但不幸的是,上面的正则表达式匹配 我对正则表达式的理解: “\b”(单词的开头) “a”(只是字母a) “\w”(字母数字字符) “*”(重复上一任期) “\b”(字尾) 我做错了什么?是的,正则表达式将匹配 Pattern: \ba\w*\b String: a^7lowah *表示“零或更多” 这就是比赛: 正如您所看到的

我跟在后面

当我尝试测试正则表达式时(方法dump来自linqpad,用于在控制台上显示它):

它应该匹配一个以“a”开头的单词,并且在单词末尾有x个字母数字字符

但不幸的是,上面的正则表达式匹配

我对正则表达式的理解:

  • “\b”(单词的开头)
  • “a”(只是字母a)
  • “\w”(字母数字字符)
  • “*”(重复上一任期)
  • “\b”(字尾)

我做错了什么?

是的,正则表达式将匹配

Pattern: \ba\w*\b
String: a^7lowah
*
表示“零或更多”

这就是比赛:

正如您所看到的,没有匹配的单词字符,但是因为您正在量化“零或更多”,所以这并不重要——我们的指针跳过了构造的这一部分,并且已经可以断言单词边界

您可能需要将
*
改为
+

另读:


  • 是的,正则表达式将匹配

    Pattern: \ba\w*\b
    String: a^7lowah
    
    *
    表示“零或更多”

    这就是比赛:

    正如您所看到的,没有匹配的单词字符,但是因为您正在量化“零或更多”,所以这并不重要——我们的指针跳过了构造的这一部分,并且已经可以断言单词边界

    您可能需要将
    *
    改为
    +

    另读:


    它只匹配字符串的
    a


    由于
    a
    是单词字符,而
    ^
    不是单词字符,因此它们之间的空字符串定义了单词边界。(对于
    \b

    在您的例子中,
    a
    是匹配的,因为它后面紧跟着前面提到的单词边界。原因是
    *
    与前面标记的零个或多个字符匹配


    根据
    x
    是否应该是1个或多个令牌而不是0个或多个令牌,您需要更改为
    \ba\w+\b

    它只匹配字符串的
    a


    由于
    a
    是单词字符,而
    ^
    不是单词字符,因此它们之间的空字符串定义了单词边界。(对于
    \b

    在您的例子中,
    a
    是匹配的,因为它后面紧跟着前面提到的单词边界。原因是
    *
    与前面标记的零个或多个字符匹配


    根据您的
    x
    是否应该是1个或多个令牌而不是0个或多个令牌,您需要更改为
    \ba\w+\b

    问题不在于您的Regexp,而在于您对成功的理解。regexp仅与“a”匹配,但这仍然是一个匹配项,成功将是真的。

    问题不在您的regexp中,而是您对成功的解释。regexp仅与“a”匹配,但这仍然是一个匹配,成功将是真的。

    这真的很奇怪,您的regexp没有问题,不应该匹配。您应该指定不希望此匹配成功的原因。是因为前面的
    a
    后面跟的是
    ^
    而不是空格吗?是因为您希望整个输入必须与输出匹配吗?是因为
    a
    后面跟的是0,而不是1或更多其他字母吗?这真的很奇怪,您的regexp没有问题,它不应该匹配。您应该指定不希望此匹配成功的原因。是因为前面的
    a
    后面跟的是
    ^
    而不是空格吗?是因为您希望整个输入必须与输出匹配吗?是因为
    a
    后面跟的是0,而不是1个或更多其他字母吗?我只是注意到了这一点,我不知道它会算作一个特殊字符(在本例中为“^”作为一个单词的结尾。因此a将被匹配。当我在正则表达式末尾使用:^开始和$时,它工作得很好。我只是注意到了这一点,我不知道它会计算特殊字符(在本例中为“^”作为一个单词的结尾。所以a是匹配的。当我在正则表达式的结尾使用:^开始和$时,它工作得很好。因为
    a
    是一个单词字符,
    ^
    不是一个单词字符,它们之间的空字符串定义了单词边界。@nhahdh我可以把它编辑到答案中吗?谢谢你让我知道
    a
    是一个单词字符,而
    ^
    不是一个单词字符,它们之间的空字符串定义了单词边界。@NHAHDH我可以将其编辑到答案中吗?感谢您让我知道+1,您不仅更快,而且您的答案更好地描述了OP的问题。谢谢,将“*”改为“+”行得通!它确实匹配a作为一个单词。因为它认为“^”是单词的结尾。+1,您不仅更快,而且您的答案更好地描述了OP的问题。谢谢,将“*”更改为“+”行得通!它确实匹配a作为一个单词。因为它认为“^”是单词的结尾。