Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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

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,我需要一个正则表达式来查找我的模式的所有匹配项 文本是这样的: "someother text !style_delete [company code : 43ev4] between text !style_delete [organiztion : 0asj9] end of line text" Pattern pattern = Pattern.compile("!style_delete\\s*\\[.*\\]"); !style_delete [company code : 43

我需要一个正则表达式来查找我的模式的所有匹配项

文本是这样的:

"someother text !style_delete [company code : 43ev4] between text !style_delete [organiztion : 0asj9] end of line text"
Pattern pattern = Pattern.compile("!style_delete\\s*\\[.*\\]");
!style_delete [company code : 43ev4] between text !style_delete [organiztion : 0asj9]
我想找到该模式的所有匹配项:

!style_delete [.*]
我试过这样做:

"someother text !style_delete [company code : 43ev4] between text !style_delete [organiztion : 0asj9] end of line text"
Pattern pattern = Pattern.compile("!style_delete\\s*\\[.*\\]");
!style_delete [company code : 43ev4] between text !style_delete [organiztion : 0asj9]
这样,匹配文本如下所示:

"someother text !style_delete [company code : 43ev4] between text !style_delete [organiztion : 0asj9] end of line text"
Pattern pattern = Pattern.compile("!style_delete\\s*\\[.*\\]");
!style_delete [company code : 43ev4] between text !style_delete [organiztion : 0asj9]
但我的期望如下:

match 1 : !style_delete [company code : 43ev4] 
match 2 : !style_delete [organiztion : 0asj9]

请帮助我,java中的正则表达式将获得什么样的输出。

这是因为
*
是贪婪的。改用这个:

"!style_delete\\s*\\[[^\\]]*\\]"
这意味着:匹配括号中的所有内容,不包括结束语
]

或者将
[]
之间的内容设置为非贪婪:

"!style_delete\\s*\\[.*?\\]"
您需要使用匹配:

start.*?end
在您的情况下,模式是:

!style_delete\\s\\[(.*?)\\] (Even simple to understand than first version :))
证明(Java 7):

链接到证明:

@Test
公开无效测试(){
final String input=“someother text!style_delete[company code:43ev4]在文本之间!style_delete[organization:0asj9]行尾文本”;
//my regexp:强文本
//最后一个字符串regex=“(!style\u delete\\s\\[[a-zA-Z0-9\\s:][*\\])”;
//来自Trinmon的regexp:
最后一个字符串regex=“(!style\u delete\\s*\[^\\]]*\\])”;
final Matcher m=Pattern.compile(regex.Matcher)(输入);
最终列表匹配项=新的ArrayList();
while(m.find()){
匹配。添加(m.group(0));
}
assertEquals(2,matches.size());
assertEquals(“匹配1:”,匹配.get(0),“!style_delete[公司代码:43ev4]”;
assertEquals(“匹配2:”,匹配.get(1),“!style_delete[Organization:0asj9]”;
}
编辑


也许特里尼蒙回答的模式更优雅一点。我用他的正则表达式更新了正则表达式。

您能提供一个您试图匹配的文本示例吗?您可以用
[^]]*
替换括号中的
*
。这将匹配方括号内的所有内容,而不是右方括号,这样您就不会意外地消耗太多。要尝试您的regexp模式,您可以始终使用一些在线regexp测试仪(google“online regexp”提供一些)。我经常使用一个正则表达式,它必须在正斜杠之间,比如/regexp*/