Java正则表达式问题 - 忽略语录

时间:2011-01-31 23:30:05

标签: java regex

我正在尝试使用正则表达式编写程序。正如我在另一个问题中所解释的那样,标识符的格式是它只能以一个字母开头(其余部分可以包含任何内容)。我的这一部分大部分已经解决了。 但是,引号内的任何内容都不能算作标识符。

目前我使用Pattern pattern = Pattern.compile("[A-Za-z][_A-Za-z0-9]*");作为我的模式,表示第一个字符只能是字母。那么如何编辑它以检查单词是否被引号括起来(并排除这些单词)?

2 个答案:

答案 0 :(得分:3)

使用否定的lookaround断言:

"(?<!\")\\b[A-Za-z][_A-Za-z0-9]*\\b(?!\")"

示例:

Pattern pattern = Pattern.compile("(?<!\")\\b[A-Za-z][_A-Za-z0-9]*\\b(?!\")");
Matcher matcher = pattern.matcher("Foo \"bar\" baz");
while (matcher.find())
{
    System.out.println(matcher.group());
}

输出:

Foo
baz

看到它在线工作:ideone

答案 1 :(得分:2)

使用lookarounds。

"(?<![\"A-Za-z])[A-Z...

(?<![\"A-Za-z])部分表示“如果前一个字符不是引号或字母”。