我有这段代码:
String result = text;
String regex = "((\\(|\\[)(.+)(\\)|\\])){1}?";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(result);
System.out.println("start");
System.out.println(result);
while (matcher.find()) {
System.out.print("Start index: " + matcher.start());
System.out.print(" End index: " + matcher.end() + " ");
System.out.println(matcher.group());
}
System.out.println("finish");
我有一个我想要匹配的字符串:
Some text sentence or sentences [something 234] (some things)
执行时得到的输出:
start
some text sentence or sentences [something 234] (some things)
Start index: 32 End index: 61 [something 234] (some things)
finish
现在我实际上希望它分别在括号中找到找到的案例,以便找到: [匹配234] (有些事情)作为第二场比赛
有人可以帮我构建相应的正则表达式吗?我不确定如何将不情愿的量词放在整个正则表达式中,因此我将括号中的所有括号内的元素包围起来。但我不明白为什么这个不情愿的量词在这里表现得很贪婪,我需要做些什么才能改变它?
答案 0 :(得分:1)
{1}
是多余的,因为任何没有指定量词的元素都需要找到一次。让它不情愿也没有意义,因为它没有描述可能重复的范围(例如{min,max}
添加?
告诉正则表达式引擎使该范围内的重复次数尽可能接近min
。此处{n}
描述了精确的重复次数,因此min
= max
= n
。
现在,您应该能够通过使.+
(括号内的内容)不情愿来解决您的问题。为此,请使用.+?
。
请尝试:
String regex = "((\\(|\\[)(.+?)(\\)|\\]))";