gpt4 book ai didi

java - Matcher无法识别java中的第二组正则表达式

转载 作者:行者123 更新时间:2023-12-01 09:47:22 26 4
gpt4 key购买 nike

当我使用 Matcher 从正则表达式组中查找符号时遇到问题,它无法识别第二组。也许下面的代码可以清楚地说明这一点:

public void set(String n){
String pat = "(\\d+)[!@#$%^&*()_+-=}]";
Pattern r;
r = Pattern.compile(pat);
System.out.println(r);
Matcher m;
m = r.matcher(n);
if (m.find()) {
JOptionPane.showMessageDialog(null,
"Not a correct form", "ERROR_NAME_MATCH", 0);
}else{
name = n;
}
}

运行代码后,第一组可以识别,但第二组 [!@#$%^&*()_+-=}] 不能识别。我完全确定该表达式是正确的,我已检查过与“RegexBuddy”一起使用。在一行中连接两个或多个组肯定存在问题。感谢您的帮助。

最佳答案

您的正则表达式 - (\d+)[!@#$%^&*()_+=}-] - 匹配后面 1 个以上数字的序列带有指定集合中的符号。

您想要测试一个字符串,如果字符串中存在指定集合中的单个字符,则返回 true

因此,只需将 \d 移至字符类,当然还将 - 移至该类的末尾:

String pat = "[\\d!@#$%^&*()_+=}-]";
^^^

如果需要匹配数字或特殊字符,请使用

String pat = "\\d|[!@#$%^&*()_+=}-]";

如果您两者都需要,无论顺序如何:

String pat = "^(?=\\D*\\d)(?=[^!@#$%^&*()_+=}-]*[!@#$%^&*()_+=}-])";

关于java - Matcher无法识别java中的第二组正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37880994/

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