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