.NET正则表达式中的锚点

时间:2016-04-15 06:27:15

标签: .net regex

这是关于问题Check a string to see if all characters are hexadecimal values中给出的答案的问题。

建议的正则表达式如下:

\A\b[0-9a-fA-F]+\b\Z

现在,\A\Z似乎分别等同于^$\Z的行为方式不同,因为它在匹配时允许使用换行符(这可能是也可能不是。)

我不明白为什么使用\b匹配字边界“锚点”。字符串的开头/结尾始终不是单词边界吗?

最终,正则表达式可以被重写为具有相同行为的^[0-9a-fA-F]$(忽略尾随\n问题)。我错过了什么吗?使用\b是否需要一些奇怪的边缘情况?

测试用例:

123ABC -> true
123def -> Returns true
123g -> Returns false

1 个答案:

答案 0 :(得分:1)

word boundary \b匹配非单词和单词字符,如果第一个字符是单词字符,则在字符串的开头,最后如果最后一个字符是单词字符,则匹配。

因此,\A\b[0-9a-fA-F]+\b\Z等于\A[0-9a-fA-F]+\Z,因为字符串中的所有字符必须是字符的字符([0-9][a-fA-F]字母)匹配它

在这种情况下,它将是一个不同的故事:\A\b[0-9a-fA-F-]+\b\Z只会在开头和结尾处匹配带有单词字符的字符串。

使用\z匹配整个字符串,最后不允许\n