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