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

word1代码1 -10001!无

意思是:搜索word1和code1和-10001而不是无

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

我有这样的文字行:

1-“我惯常的单词12包括GCode10 -10001。记录结束” //应该为true,并返回“ world12包括GCode10 -10001。”

2-“这是另一行word12,其中包括GCode10 -10001 none记录结束” //应该为false,不返回任何内容

我尝试了这个:

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


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

我也尝试过这个:

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


但是它只给了我“ word12”,“ GCode10”,却错过了“ -10001”,而且与第二行匹配!不应该这样

我不是正则表达式专家...

最佳答案

您快到了,您只是错误地使用了负前行:

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


除非您将每行都视为单独的字符串,否则还应该使用multiline选项编译正则表达式。因此,如果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(),因此将忽略所有正则表达式元字符。

09-10 21:53