gpt4 book ai didi

java - 如何匹配java正则表达式中注释 block 之间的文本?

转载 作者:行者123 更新时间:2023-12-01 16:49:14 33 4
gpt4 key购买 nike

我必须匹配 /* 之间的文本和*/ 。这些是java block 注释。

目前,我创建的程序无法按预期工作,因为它不会在关闭 token */ 时停止。 。这是代码:

public static void main(String[] args) {
String s = "public void /* sdksd\n*k/sss\\d\nsd */ main class\n/*String s = null;*/trtgg";
Matcher matcher = Pattern.compile("(?s)/\\*(.*)(?=\\*/)").matcher(s);
while (matcher.find()) {
String group = matcher.group(1);
System.out.println("group="+group);
}
}

它打印:

group= sdksd
*k/sss\d
sd */ main class
/*String s = null;

预期输出是:

group= sdksd
*k/sss\d
sd
group=String s = null;

为什么它不会在第一次关闭 token 时停止 */

还有其他方法可以实现这一点吗?

最佳答案

假设您不允许嵌套注释,例如 /* 外部注释/* 嵌套注释 */外部注释 */

在Java中,可以使用非贪婪匹配:

/\\*.*?\\*/

或者避免非贪婪匹配(某些正则表达式没有):

/\\*([^*]|\\*[^/])*\\*/

如果允许嵌套注释,则生成的语言是非正则的,并且无法用真正的正则表达式来描述(即使使用 Java 的正则表达式仍然可能,因为它不是严格正则的)。

关于java - 如何匹配java正则表达式中注释 block 之间的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43896420/

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