Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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/17.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/0/asp.net-mvc/17.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_Java.util.scanner - Fatal编程技术网

java中的正则表达式是什么?

java中的正则表达式是什么?,java,regex,java.util.scanner,Java,Regex,Java.util.scanner,我正在使用Java.util.Scanner读取一个文件,并且必须找到如下配对: 设置键值 必须跳过以#开头的注释, 必须跳过空行, 它是一个txt文件:只有注释、空行和包含值的行,格式为:SET key value。 键没有空格,值可以在“”中 我面临着使用什么正则表达式跳过行和注释的问题,或者我是否可以直接使用Scanner中的find模式来查找键值对。我不擅长正则表达式,所以请帮助我。 或者,如果有比扫描器更好的方法,请建议。不要尝试将其全部放在on RE中,请使用多个步骤。 假设该行是一

我正在使用Java.util.Scanner读取一个文件,并且必须找到如下配对:

设置键值

必须跳过以#开头的注释, 必须跳过空行, 它是一个txt文件:只有注释、空行和包含值的行,格式为:SET key value。 键没有空格,值可以在“”中

我面临着使用什么正则表达式跳过行和注释的问题,或者我是否可以直接使用Scanner中的find模式来查找键值对。我不擅长正则表达式,所以请帮助我。
或者,如果有比扫描器更好的方法,请建议。

不要尝试将其全部放在on RE中,请使用多个步骤。 假设该行是一个
字符串

  • 修剪它以删除前导和尾随空格

  • 如果
    line.length()==0
    line.matches(“#*”)
    跳过它

  • 使用
    line.substring(5,line.length())
    删除前导的4个字符,为安全起见,您可以检查它们是否等于“SET”

  • 使用
    line.indexof(“\\s”)
    查找第一个空格,这是您必须拆分的地方

  • 使用
    line.substring(…)
    获取键和值


  • 可以使用以下正则表达式:

    SET (\w*) ("?)(.*)\2
    
    它将只匹配您想要的行,并允许您直接提取“key”的字符串作为第一个捕获组,提取“value”的字符串(不带引号)作为第三个捕获组。它还将提取“value”的引号(如果有引号)之间的所有内容,如果没有引号,则提取到行尾的所有内容

    作为Java代码中的字符串,它应该如下所示:

    "SET (\\w*) (\"?)(.*)\\2"
    

    谢谢,如果一行以#开头,我该如何查找?line.matches(“#”)不起作用。@MagicBeans:对不起,我的错误,将编辑我的答案。我如何在表达式中转义?@MagicBeans在引号前加一个反斜杠在Java中就足够了。这只是告诉它不要在那里结束字符串。最后,完整的正则表达式字符串将如下所示:
    “SET(\w*)(\”?)(.*)\2”
    @KMoschcau:当您的正则表达式是代码中定义的字符串常量时,当然您也需要转义反斜杠:
    “SET(\\w*)(\\”?)(.*)\\2”
    这不起作用:无效的转义序列(有效的是\b\t\n\f\r\”\)@MagicBeans请参阅Frank Puffer的评论。你也需要避开反斜杠。不过,不要逃避已经逃避引用的反斜杠。我将相应地更新我的原始答案。