我想使用一些正则表达式来查找事件。例如,用户将输入:
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()
,因此将忽略所有正则表达式元字符。