我正在尝试编写一个正则表达式来匹配某个前面没有两个破折号 (--) 或一个斜杠和一个星号 (/*) 的单词。我尝试了一些表达方式,但似乎没有效果。
下面是我正在测试的文本
a_func(some_param);
/* a comment initialization */
init;
我正在尝试编写一个仅匹配单词 init
的正则表达式仅在最后一行中,到目前为止我所尝试的就是匹配单词 init
在initialization
最后一行,我试图寻找现有的答案,发现使用了否定前瞻,但它仍然匹配 init
在initialization
。以下是我尝试过的表达式:
-
(?!\/\*).*(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/