java - 正则表达式 - 获取两个注释之间的代码

标签 java regex

我怎样才能得到

Text t;
Graph g;

来自

// Co
Text t;
Graph g;
// Co

// Co\r?\n(.*)\r?\n// Co

只有一行时有效,但多行时无效。

最佳答案

默认情况下,. 匹配除换行符 (\n) 之外的任何字符,但您可以使用 the Pattern.DOTALL flag使其也匹配换行符。因此,例如,而不是这样:

final Pattern pat = Pattern.compile("// Co\r?\n(.*)\r?\n// Co");

你会使用这个:

final Pattern pat = Pattern.compile("// Co\r?\n(.*)\r?\n// Co", Pattern.DOTALL);

同样,您可以使用以下任一样式在正则表达式本身内设置 s 标志:

final Pattern pat = Pattern.compile("// Co\r?\n((?s).*)\r?\n// Co");
final Pattern pat = Pattern.compile("// Co\r?\n(?s:(.*))\r?\n// Co");

它可以让您准确控制正则表达式的哪一部分接受 . 的换行符。 (但我会坚持使用 DOTALL 方法,除非你有一个正则表达式,其中 . 有时表示一件事,有时表示另一件事。)

编辑添加:似乎很可能 - 但您必须根据您的用例自行确定 - 您需要使用非贪婪 量化,.*?,而不是贪婪量化,.*.

关于java - 正则表达式 - 获取两个注释之间的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8202081/

相关文章:

python - 为什么我的 re.search 命令不起作用?

等同于 PCRE/etc 的 Java 正则表达式。简写 `\K` ?

java - 从键码中输入键值

java - 在java中传递泛型类类型

java - Android:缩小/放大 GridLayout

java - 在Tomcat部署之前运行java方法启动数据库

java - 在 Java 中使用正则表达式(一些特定字符)

python - 在文件夹中的多个文件上运行数据解析器? Python

c# - 用 RegEx 和 C# 替换文本没有按照我需要的方式工作

java - Byte Buddy 中的拦截器类可见性