需要匹配以下两种情况。
E.g。
*
* this is a comment
*
* this is a comment too
A = B*C;*comment starts from here, but not before C.
(第1-4行,应该捕获C之后的第5行)
更新了我的解决方案:(^ *。 |(?< =;)\ s + *。 |(?< =;)+ *。 |( ?< =:)\ S + * |(小于=:?)+ * )
使用regexplanet.com/advanced/java/index.html
进行测试只是想知道是否有更好的解决方案。
感谢您提供帮助以实现这一目标。 问候。
答案 0 :(得分:1)
此正则表达式将执行您要求的操作并在匹配中为您捕获文本:
(^ *\*.*|;\*.*)
我们使用组构造来捕获所有内容,然后使用OR(|)传入两个正则表达式。
为了打破这种局面,让我们从'('和'|':
之间的第一部分开始吧^ = start at the beginning of a line
* = followed by zero or more spaces (note there's a [space] hiding in there)
\* = followed by an '*'
.* = followed by zero or more of any character (all the way to end of line)
对于'|'之间表达式的第二部分和')':
;\* = look for ';*'
.* = followed by zero or more of any character (all the way to end of line)
我注意到的一件事是你没有考虑';'之间的可能空格和'*'。如果您需要,那么我们只需要在表达式的第二部分添加“零或多个空格”部分:
(^ *\*.*|; *\*.*) // note [space] characters hiding in there.
以下是用于测试此问题的'测试文件':
*
* this is a comment
*
* this is a comment too
A = B*C;*comment starts from here, but not before C.
A = B*C; *comment starts from here, with a space for readability.
您可以在https://www.regex101.com(或其他人根据自己的喜好)对此进行测试。
您可能需要进行其他优化,例如将\s
元序列替换为硬编码[space]字符,但我尝试完全按照您的要求进行操作。
答案 1 :(得分:0)
您可以这样编程:
String line; // Assuming the string you're going through is in this line.
String comment;
if (line.trim().startsWith("* ")){ // Deals with cases where it is just the comment
comment = line;
} else if (line.contains(";*") { // Deals with cases where the comment is in the line
comment = line.substring(line.indexOf(";*"));
}