Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式/空格问题_Java_Regex - Fatal编程技术网

Java正则表达式/空格问题

Java正则表达式/空格问题,java,regex,Java,Regex,尝试匹配“TRA”、“tr A”、“tr A”等对于第一种情况很好,没有空格,但对于任何有空格的情况都不行(只是忽略)。不知道我做错了什么 编辑 本质上,我试图匹配TRA的所有出现,无论每个字母(或出现)之间是否有任意数量的空格 例如:“trattra”有4次出现,我想用一个正则表达式来匹配它们。您应该使用: String regex = "(\\s*T\\s*R\\s*A\\s*)*"; Pattern p = Pattern.compile(regex); 而不是: String rege

尝试匹配“TRA”、“tr A”、“tr A”等对于第一种情况很好,没有空格,但对于任何有空格的情况都不行(只是忽略)。不知道我做错了什么

编辑

本质上,我试图匹配TRA的所有出现,无论每个字母(或出现)之间是否有任意数量的空格

例如:“trattra”有4次出现,我想用一个正则表达式来匹配它们。

您应该使用:

String regex = "(\\s*T\\s*R\\s*A\\s*)*";
Pattern p = Pattern.compile(regex);
而不是:

String regex = "(\\s*T\\s*R\\s*A\\s*)";
您的正则表达式正在尝试匹配给定文本的0个或多个匹配项,根据您的问题,您只需尝试匹配一次即可

更新:要匹配多个事件,请使用以下代码:

String regex = "(\\s*T\\s*R\\s*A\\s*)*";

对于您的目标,正确的正则表达式应该是
(\\s*T\\s*R\\s*A\\s*)+
,因为它要求至少出现一次TRA group,并且不会匹配空字符串

例如:

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));
输出:

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 

事实上,我也在试着匹配“特拉特拉特拉”,“特拉特拉特拉特拉特拉”,等等。基本上,我需要匹配所有出现的TRA,任意数量的空格与否。很抱歉,我忘了提到这一点。使用+(一个或多个)的结果相同。不确定是什么问题。@nixpunk你的代码到底是什么?对我来说,它工作正常(参见示例)更多详细信息,请参见我下面的示例。您的示例在第一个
TRA
之后有双
T
字母,是否有意?
String regex = "(\\s*T\\s*R\\s*A\\s*)";