我想使用一些正则表达式来查找事件。例如,用户将输入:
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的专家......
答案 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()
,因此任何正则表达式元字符都将被转义。