我需要这个例子的正则表达式:
//This is a comment and I need this \n position
String notwanted ="//I do not need this end of line position";
答案 0 :(得分:1)
试试这个正则表达式:
(?<!")\/\/[^\n]+(\n)
您可以使用Matcher
方法matcher.start(1)
来获取\n
字符的索引,但不会匹配\\
前面有"
的字符串。 Java中的示例:
public class Main {
public static void main(String[] args){
String example = "//This is a comment and I need this \\n position\n" +
"String notwanted =\"//I do not need this end of line position\";";
Pattern regex = Pattern.compile("(?<!\")//[^\\n]+(\\n)");
Matcher matcher = regex.matcher(example);
while (matcher.find()) {
System.out.println(matcher.start(1));
}
}
}
但是使用它就足够了:
(?<!")\/\/[^\n]+
并使用matcher.end()
来获取新线的起始位置。
另一种情况,如果你想使用这个位置拆分一个字符串,你也可以使用这个:
example.split("(?<=^//[^\n]{0,1000})\n");
(?<=^//[^\n]{0,999})
表示:
?<=
- lookbehind,^//
- 一行开头,//评论标志[^\n]{0,1000}
- 多个字符,但不是新行;这里很棘手,因为lookbehind需要定义长度,你不能使用像*
或+
这样的quatifires,这就是为什么你需要使用interval,在这种情况下,从0到1000个字符,但是请注意,如果您的评论超过1000个字符(不太可能但仍然可能),则无效 - 因此请仔细设置此编号(本例中为1000)\n
- 您正在寻找的新行但如果您想在多个地方拆分整个字符串,则需要在正则表达式的开头添加修饰符(?m)
- 多行匹配:
(?m)(?<=^//[^\n]{0,1000})\n
但我不完全确定
&gt;&gt;编辑&lt;
试试这段代码:
public class Main {
public static void main(String[] args){
String example =
"//This is a comment and I need this \\n position\n" +
"String notwanted =\"//I do not need this end of line position\";\n" +
"String a = aaa; //comment here";
Pattern regex = Pattern.compile("(?m)(?<=(^|;\\s{0,1000})//[^\n]{0,1000})(\n|$)");
Matcher matcher = regex.matcher(example);
while(matcher.find()){
System.out.println(matcher.start());
}
System.out.println(example.replaceAll("(?<=(^|;\\s{0,1000})//[^\n]{0,1000})(\n|$)", " (X)\n"));
}
}
也许这个正则表达式将满足您的期望。如果没有,请重新定义并提出另一个问题,其中包含更多详细信息,例如:输入,排除输出,当前代码,目标。
答案 1 :(得分:0)
这对你有用。这真的非常糟糕。无法真正想到一个更好,更通用的解决方案。我假设你也想要这样的评论:
String myStr = "asasdasd"; //some comment here
^[^"\n]*?(?:[^"\n]*?"(?>\\"|[^"\n])*?"[^"\n]*?)*?[^"\n]*?\/\/.*?(\n)