这是关于问题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
答案 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
。