试图制作一个正则表达式,以捕获所有未括在方括号中的单词(例如,只说鸡肉)。像

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-aheadsboundary 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。

10-02 04:13