java - 除某些字符外的所有字符串的正则表达式

标签 java regex

我正在尝试编写一个正则表达式来匹配某个前面没有两个破折号 (--) 或一个斜杠和一个星号 (/*) 的单词。我尝试了一些表达方式,但似乎没有效果。

下面是我正在测试的文本

a_func(some_param);

/* a comment initialization */

init;

我正在尝试编写一个仅匹配单词 init 的正则表达式仅在最后一行中,到目前为止我所尝试的就是匹配单词 initinitialization最后一行,我试图寻找现有的答案,发现使用了否定前瞻,但它仍然匹配 initinitialization 。以下是我尝试过的表达式:

  • (?!\/\*).*(init)
  • [^(\-\-|\/\*)].*(init)
  • (?<!\/\*).*(init)在阅读 regex101 的快速引用时,我发现了这个负面的lookbehind,我相信它与我需要的有类似的例子,但我仍然无法得到我想要的,我应该更多地研究负面的lookbehind还是这不是我实现的方式我想要什么?

我对正则表达式的了解不是那么广泛,所以我不知道它是否可以实现我想要的,但是它可行吗?

最佳答案

假设--/*init在同一行,有一些选项。正如评论者所说,多行评论可能需要更强的技术。

我知道的最简单的方法是实际预处理字符串以删除 --.*$/\*.*$,然后查找 init(如果您不想匹配初始化,则使用init\b):

String input = "if init then foo";
String checkme = input.replaceAll("--.*$", "").replaceAll("/\\*.*$", "");
Pattern pattern = Pattern.compile("init");  // or "init\\b"
Matcher matcher = pattern.matcher(checkme);
System.out.println(matcher.find());

您还可以使用否定后向查找,如 @olsli 的答案所示。

关于java - 除某些字符外的所有字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40000193/

相关文章:

java - 在代理 testng 内部工作时返回连接超时

java - 从java在远程linux中运行命令

java - 为什么 JDBC 使用原语而不是包装类?

java - 使用 Regex 迭代 XML 文本

c++ - 正则表达式的开发人员

java - 谁能指导我一份好的 Java 声音指南?

java - Spring JPA 查询示例不返回结果

c++ - Qt 解析自定义文件格式

正则表达式匹配所有字符串,除了

python - 如何使用正则表达式解析 HTML 中的数字?