使用正则表达式查找事件(Java引擎)

时间:2012-04-13 14:46:25

标签: java regex

我想使用一些正则表达式来查找事件。例如,用户将输入:

word1 code1 -10001

表示:搜索word1 AND code1 AND -10001 AND NOT none

这些标准用于构建正则表达式。

我有这样的文字:

1 - "我的常用词12包括GCode10 -10001。记录结束" //这应该是真的并且返回" world12包括GCode10 -10001。"

2 - "这是另一行字12包括GCode10 -10001无记录结束" //这应该是假的,不返回任何内容

我试过了:

^(?=.*?word1)(?=.*?code1)(?=.*?-10001)((?!none).)*$

适用于第1行,但它返回所有行

我也试过这个:

(\\w*word1\\w*).*(\\w*code1\\w*).*(\\w*-10001\\w*)(?!none)

但它只给了我" word12"," GCode10",但它错过了" -10001"而且,它匹配第二行!它不应该。

我不是regexp的专家......

1 个答案:

答案 0 :(得分:2)

你几乎就在那里,你只是错误地使用了负面预测:

^(?=.*?word1)(?=.*?code1)(?=.*?-10001)(?!.*?none).*$

除非您将每一行视为单独的字符串,否则您还应该使用多行选项编译正则表达式。因此,如果subjectString是多行字符串,

List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("^(?=.*?word1)(?=.*?code1)(?=.*?-10001)(?!.*?none).*$", Pattern.MULTILINE);
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    matchList.add(regexMatcher.group());
} 

将为您提供符合条件的所有行的列表。

如果您正在处理用户输入,则可能需要在用户提供的所有字符串上调用Pattern.quote(),因此任何正则表达式元字符都将被转义。