gpt4 book ai didi

搜索不包括某些字符串的多行文本的Java正则表达式

转载 作者:行者123 更新时间:2023-11-30 08:27:32 25 4
gpt4 key购买 nike

我有一些代码:

String test = "int measure; \n" +
"void introduce() { \n" +
"while (line != null) { \n" +
"if(measure > 0) { \n" +
"System.out.println(smile); \n" +
"} \n" +
"}";

String functions = "^.*(?!(catch|if|while|try|return|finally|new|throw)).*$";
Pattern patternFunctions = Pattern.compile(functions);
Matcher matcherFunctions = patternFunctions.matcher(test);
while(matcherFunctions.find())
System.out.println(matcherFunctions.group());

这应该打印除第三和第四行之外的所有行,因为它们包含“if”和“while”字样。但实际上它什么也不打印。每一个帮助将不胜感激。谢谢。

更新:

谢谢大家的回答!您的示例正在运行。我还有一个问题:在否定前瞻之后我想插入条件 .*\\(.*\\).*\\{这意味着文本包括 .*<negotiation>.*(.*).*{以简单的方式,它应该打印我的 String test 的第二行.我试过这个正则表达式 (?m)^.*(?!(catch|if|while|try|return|finally|new|throw).\\(.*\\).*\\{)*$但它不能以正确的方式工作。你有什么建议?

最佳答案

  1. 从模式中移除第一个.*:"^.*(?!(catch...",因为它允许ifwhile!
  2. 使用多行 标志编译您的正则表达式。

工作代码:

String functions = "^((?!(catch|if|while|try|return|finally|new|throw))).*$";
Pattern patternFunctions = Pattern.compile(functions, Pattern.MULTILINE);
Matcher matcherFunctions = patternFunctions.matcher(test);

更多关于 java.util.regex.Pattern.Multiline

In multiline mode the expressions ^ and $ match just after or just before, respectively, a line terminator or the end of the input sequence. By default these expressions only match at the beginning and the end of the entire input sequence.

关于搜索不包括某些字符串的多行文本的Java正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20806993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com