Java Regex /空格问题

时间:2012-02-17 04:15:56

标签: java regex

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次出现,我希望将它们与一个正则表达式匹配。

3 个答案:

答案 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*)";