如何使用正则表达式在大括号中提取单词?
我想提取括在花括号中的所有单词 ,所以我有一个像这样的表达式
foo {bar} moo {mar}
要匹配的字符串可能包含任意数量的单词,但我开始认为我正以错误的方式处理此问题。
我的尝试
我试着将大括号分成几组,这样我就可以使用每一个匹配。 所以,我做了一个正则表达式:
String rx = ".*\\{({GROUP}\\w+)\\}.*";
注意:我正在使用JRegex语法,所以我需要逃避一些问题。
结果
我得到的结果是一个(尽管是正确的)匹配bar
,而我期待两个匹配bar
和mar
。 我误解了什么,我该如何纠正? 我可能需要使用其他一些量词.
部分,但我希望你也可以帮助我。
提前谢谢了!
您的正则表达式.*\{({GROUP}\w+)\}.*
不起作用,因为它一次匹配所有输入字符串:
-
.*
匹配foo
-
\{({GROUP}\w+)\}
匹配{bar}
-
.*
匹配moo {mar}
你应该使用这样的东西:
List matchList = new ArrayList (); Pattern regex = Pattern.compile("\\{([^}]*)\\}"); Matcher regexMatcher = regex.matcher(subjectString); while (regexMatcher.find()) { matchList.add(regexMatcher.group()); }
此正则表达式不处理内部花括号
一个变体,使用不情愿的修饰语“。*?” 在正则表达式中。 你可以在这里找到关于正则表达式(贪婪,不情愿,占有欲)的搜索策略的额外信息: http : //javascript.about.com/library/blre09.htm
List matchList = new ArrayList (); Pattern regex = Pattern.compile("\\{(.*?)\\}"); Matcher regexMatcher = regex.matcher(subjectString); while (regexMatcher.find()) { matchList.add(regexMatcher.group()); }
语法选择是你的。 这个正则表达式与@ madgnome的正则表达式相同。 Personnaly,我更喜欢使用不情愿的搜索而不是字符排除……