用于检查字符串的正则表达式仅包含十六进制字符^\p{XDigit}+$

2022-08-31 22:17:32

我以前从未做过正则表达式,我已经看到它们对于处理字符串非常有用。我看过一些教程(例如),但我仍然无法理解如何对字符串中的十六进制字符进行简单的Java正则表达式检查。

用户将在文本框中输入类似的东西:我想知道输入是否正确,否则如果返回false时之类的东西。0123456789ABCDEFXTYSPG456789ABCDEF

是否可以使用正则表达式执行此操作,或者我是否误解了它们的工作方式?


答案 1

是的,您可以使用正则表达式执行此操作:

^[0-9A-F]+$

解释:

^            Start of line.
[0-9A-F]     Character class: Any character in 0 to 9, or in A to F.
+            Quantifier: One or more of the above.
$            End of line.

要在Java中使用此正则表达式,例如,您可以在String上调用该方法:matches

boolean isHex = s.matches("[0-9A-F]+");

请注意,仅查找完全匹配项,因此在这种情况下,您不需要行的起点和终点锚点。看到它在线工作:ideonematches

您可能还希望同时允许大写和小写的 A-F,在这种情况下,您可以使用以下正则表达式:

^[0-9A-Fa-f]+$

答案 2

可能是你想使用 POSIX 字符类 \p{XDigit},所以:

^\p{XDigit}+$

此外,如果您计划经常使用正则表达式,建议使用常量以避免每次都重新编译它,例如:

private static final Pattern REGEX_PATTERN = 
        Pattern.compile("^\\p{XDigit}+$");

public static void main(String[] args) {
    String input = "0123456789ABCDEF";
    System.out.println(
        REGEX_PATTERN.matcher(input).matches()
    );  // prints "true"
}