Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式以匹配Java中@之间的字符串_Java_Regex - Fatal编程技术网

正则表达式以匹配Java中@之间的字符串

正则表达式以匹配Java中@之间的字符串,java,regex,Java,Regex,我使用Java模式编译将子字符串与特定模式匹配,并将其添加到列表中 我希望正则表达式与以下场景匹配 字符串以开头和结尾(例如。@@foo、bar、bla@@@1) 字符串以“@”开头,以“@”结尾 字符串以Hello“@@1开头,以@@”结尾,World 字符串以Hello“@@1开头,以@@@2结尾,//这是一条注释 目前的代码是:- List<String> matches = new ArrayList<String>(); Matcher m =

我使用Java模式编译将子字符串与特定模式匹配,并将其添加到列表中

我希望正则表达式与以下场景匹配

  • 字符串以开头和结尾(例如。@@foo、bar、bla@@@1)
  • 字符串以“@”开头,以“@”结尾
  • 字符串以Hello“@@1开头,以@@”结尾,World
  • 字符串以Hello“@@1开头,以@@@2结尾,//这是一条注释
  • 目前的代码是:-

        List<String> matches = new ArrayList<String>();
        Matcher m = Pattern.compile("@@([^@@]*)@@")
                     .matcher(content);
            System.out.println(m.find());
            while (m.find()) {
                matches.add(m.group());
        }
    
    List matches=new ArrayList();
    Matcher m=Pattern.compile(“@([^@]*)@”)
    .matcher(内容);
    System.out.println(m.find());
    while(m.find()){
    匹配。添加(m.group());
    }
    
    我的内容是
    'var bookSrc=“@@book:URL@@@”,var books\u count:@@count@@@var active=true'

    上面的代码只匹配@之间的字符串,实际结果是[@@count@],我希望结果是[@@book:URL@,@@count@]


    如果有任何帮助,我应该如何修改我的模式以适应上述所有场景。

    在执行循环之前,您可以调用
    Matcher.find
    一次。因此,将跳过第一个匹配。如果你移除

    System.out.println(m.find());
    
    它按预期工作。如果循环后有匹配项,您仍然可以测试:

    System.out.println(!matches.isEmpty());
    

    在执行循环之前,调用
    Matcher.find
    一次。因此,将跳过第一个匹配。如果你移除

    System.out.println(m.find());
    
    它按预期工作。如果循环后有匹配项,您仍然可以测试:

    System.out.println(!matches.isEmpty());
    

    在执行循环之前,调用
    Matcher.find
    一次。因此,将跳过第一个匹配。如果你移除

    System.out.println(m.find());
    
    它按预期工作。如果循环后有匹配项,您仍然可以测试:

    System.out.println(!matches.isEmpty());
    

    在执行循环之前,调用
    Matcher.find
    一次。因此,将跳过第一个匹配。如果你移除

    System.out.println(m.find());
    
    它按预期工作。如果循环后有匹配项,您仍然可以测试:

    System.out.println(!matches.isEmpty());
    

    你正在“吃”一个
    m.group()
    是因为
    m.find()
    的sysout,你不这么认为吗?
    [^@]
    没有做你想做的事。它匹配除
    @
    之外的任何单个字符。使用
    模式。编译(“@(.*?@”)
    (问号使。*不贪婪,因此它不会消耗后面的两个@)。你正在“吃”一个
    m.group()
    ,因为
    m.find()
    中的sysout。你不这么认为吗?
    [^@]
    没有做你想做的事情。它匹配除
    @
    之外的任何单个字符。使用
    模式。编译(“@(.*?@”)
    (问号使。*不贪婪,因此它不会消耗后面的两个@)。你正在“吃”一个
    m.group()
    ,因为
    m.find()
    中的sysout。你不这么认为吗?
    [^@]
    没有做你想做的事情。它匹配除
    @
    之外的任何单个字符。使用
    模式。编译(“@(.*?@”)
    (问号使。*不贪婪,因此它不会消耗后面的两个@)。你正在“吃”一个
    m.group()
    ,因为
    m.find()
    中的sysout。你不这么认为吗?
    [^@]
    没有做你想做的事情。它匹配除
    @
    之外的任何单个字符。使用
    模式。编译(“@(.*?@”)
    (问号使.*不贪婪,因此它不会消耗后面的两个@)