gpt4 book ai didi

java - Java 中的正则表达式

转载 作者:行者123 更新时间:2023-11-29 05:08:17 25 4
gpt4 key购买 nike

我正在尝试为以下内容编写一个正则表达式:anyTwonumbers(dot)anyThreeNumbers(dot)anyThreeNumbers(dash)anyLetter

示例:19.789.324-J 或 05.600.765-N

这是我的代码:

Pattern p = Pattern.compile("[0-9]{2}.[0-9]{3}.[0-9]{3}-[A-Z]{1}");

public void validate(String dni){
Matcher m = p.matcher(dni);
System.out.println(m.find());
}

问题是 m.find() 在存在一个或多个字母 (58.456.843-YL) 时返回 true。我希望它在只有一个字母时返回 true。

我做错了什么?

谢谢。

最佳答案

您必须转义 .(因为点是匹配除 \n 之外的任何字符的通配符)并且您还可以利用 anchor (^$) 以匹配确切的内容:

Pattern p = Pattern.compile("^[0-9]{2}\\.[0-9]{3}\\.[0-9]{3}-[A-Z]$");

如果你想再缩短一点,你可以使用:

Pattern p = Pattern.compile("^\\d{2}\\.\\d{3}\\.\\d{3}-[A-Z]$");

模式与匹配器方法

您可以使用此代码:

Pattern p = Pattern.compile("^\\d{2}\\.\\d{3}\\.\\d{3}-[A-Z]$", Pattern.MULTILINE);
Matcher matcher = pattern.matcher(text);

// check occurrence
while (matcher.find()) {
System.out.println("ok");
}

String.matches方法

顺便说一句,如果你不想使用 PatternMatcher 对象,你可以使用这样的东西:

public void validate(String dni){
System.out.println(dni.matches("^\\d{2}\\.\\d{3}\\.\\d{3}-[A-Z]$"));
}

关于java - Java 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29656084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com