正则表达式过滤掉“\ {”但允许“{”

时间:2012-05-04 16:03:10

标签: java regex

我正在尝试使用正则表达式来获取以下内容

输入 -

{foo}
{bar}
\{notgood}
\{bad}
{nice}
\{bad}

输出 -

foo
bar
nice

我想查找以{开头而不是\{的所有字符串。 我只有五个单词作为输入。

我尝试了一个正则表达式,即"\\{(foo|bar|nice|notgood|bad)",它给出了以{开头的所有单词。我不知道如何摆脱\{。我怎么能这样做?

2 个答案:

答案 0 :(得分:5)

您可以使用negative lookbehind assertion确保{只有在\之前没有匹配时才会匹配:

List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile(
    "(?<!\\\\)   # Assert no preceding backslash\n" +
    "\\{         # Match a {\n" +
    "(foo|bar|nice|notgood|bad) # Match a keyword\n" +
    "\\}         # Match a }", 
    Pattern.COMMENTS);
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    matchList.add(regexMatcher.group(1));
} 
然后

matchList将包含["foo", "bar", "nice"]

答案 1 :(得分:0)

您可以使用'group-match'字符串,如下面的代码所示:

str.replaceAll("(?<!\\\\)\\{(foo|bar|nice|notgood|bad)\\}", "$1");

$1指的是输入中的第一个()

对于str = "{foo} \{bar} {something}",它会为您提供foo \{bar} {something}