String regex = "(\\s*T\\s*R\\s*A\\s*)*";
Pattern p = Pattern.compile(regex);
尝试匹配“TRA”,“T R A”,“T R A”等。适用于第一种情况,没有空格,但不适用于任何带空格的东西(只是忽略)。不知道我做错了什么。
修改的
基本上,我试图匹配所有出现的TRA,无论每个字母(或事件)之间是否有任意数量的空格。
例如:“TRATTR A T RA T RA”有4次出现,我希望将它们与一个正则表达式匹配。
答案 0 :(得分:1)
您应该使用:
String regex = "(\\s*T\\s*R\\s*A\\s*)";
而不是:
String regex = "(\\s*T\\s*R\\s*A\\s*)*";
你的正则表达式试图匹配给定文本的0次或更多次出现,根据你的问题,你只想尝试匹配一次。
更新:要匹配多个匹配项,请使用以下代码:
String regex = "(\\s*T\\s*R\\s*A\\s*)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher("T R A T R A T R A");
while (m.find())
System.out.printf("name=[%s]%n", m.group(1));
答案 1 :(得分:0)
为了您的目标,正确的正则表达式为(\\s*T\\s*R\\s*A\\s*)+
,因为它至少需要一个TRA组,并且不会匹配空字符串。
示例:
String regex = "(\\s*T\\s*R\\s*A\\s*)+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher("S T R A T R A T R A N G E");
if (m.find()) {
System.out.println(m.group());
} else {
System.out.println("No match");
}
输出:
T R A T R A T R A
答案 2 :(得分:0)
这对我有用:
String regex = "(\\s*T\\s*R\\s*A\\s*)";