试图制作一个正则表达式,以捕获所有未括在方括号中的单词(例如,只说鸡肉)。像
chicken
将被选择但是
[chicken]
不会。有谁知道如何做到这一点?
最佳答案
String template = "[chicken]";
String pattern = "\\G(?<!\\[)(\\w+)(?!\\])";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(template);
while (m.find())
{
System.out.println(m.group());
}
它结合使用negative look-behind and negative look-aheads和boundary matchers。
(?<!\\[) //negative look behind
(?!\\]) //negative look ahead
(\\w+) //capture group for the word
\\G //is a boundary matcher for marking the end of the previous match
(请阅读以下修改内容以进行澄清)
编辑1:
如果需要考虑以下情况:
"chicken [chicken] chicken [chicken]"
我们可以将正则表达式替换为:
String regex = "(?<!\\[)\\b(\\w+)\\b(?!\\])";
编辑2:
如果还需要考虑以下情况:
"[chicken"
"chicken]"
因为仍然需要
"chicken"
,所以您可以使用:String pattern = "(?<!\\[)?\\b(\\w+)\\b(?!\\])|(?<!\\[)\\b(\\w+)\\b(?!\\])?";
从本质上讲,这两种情况都说明了在左右两侧都只有一个支架。它通过充当or的
|
以及在先行/后行之后使用?
来完成此操作,其中?
表示上一个表达式的0或1。