正则表达式检测具有双斜杠(//)的行尾(\ n)

时间:2015-08-04 17:14:16

标签: java regex

我需要这个例子的正则表达式:

    //This is a comment and I need this \n position
    String notwanted ="//I do not need this end of line position";

2 个答案:

答案 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)

Regex101