将正则表达式转换为我的Java函数

将正则表达式转换为我的Java函数,java,regex,Java,Regex,我对Java正则表达式有问题。这是我的regex语句\730\\s++{[^}]+},它可以在regex检查网站上运行,但是我很难让它在Java中运行。这是我目前的密码 String patternString = '\"730\"\s+{([^}]+)}'; Pattern pattern = Pattern.compile(patternString); Matcher matcher = pattern.matcher(vdfContentsString);

我对Java正则表达式有问题。这是我的regex语句\730\\s++{[^}]+},它可以在regex检查网站上运行,但是我很难让它在Java中运行。这是我目前的密码

    String patternString = '\"730\"\s+{([^}]+)}';
    Pattern pattern = Pattern.compile(patternString);
    Matcher matcher = pattern.matcher(vdfContentsString);
    boolean matches = matcher.matches();
谢谢你的建议

它在字符文本中表示非法转义字符

主线程java.util.regex.PatternSyntaxException中出现异常:非法重复

逃逸{和}也是因为它有特殊的含义

String patternString = "\"730\"\\s+\\{([^\\}]+)\\}";
编辑 方法查找整个字符串如果要查找长字符串的子字符串,请使用方法并从组中获取结果,这些组是通过将模式包含在parenthisis中捕获的

示例代码:

String patternString = "(\"730\"\\s+\\{([^\\}]+)\\})";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(vdfContentsString);

while (matcher.find()) {
    System.out.println(matcher.group(1));
}
{,}是元字符,请参阅以获取元字符,需要使用\\转义,因此,\\{..\}

\是转义字符,而列表中的\s、\w、\d等是元字符,因此,如上所述,这些字符也需要转义,因此,\\s+

我建议使用+?},而不是[^\\}]

这是有效的:

String patternString = '\\\"730\\\"\\s+\\{(.+?)\\}';
上面是所需的Java字符串,该字符串被解析为以下正则表达式:\730\\s+\{.+?\},然后可用于匹配输入字符串。塔丹! 两级解析

单引号声明字符,双引号声明字符串,这就是为什么在字符文本中出现语法错误非法转义字符。其次,正则表达式本身在语法上使用反斜杠,如\s中的空格。可能令人困惑的是,Java还使用\进行字符转义。这就是为什么在Java中需要两个反斜杠\\s将成为\s的结果正则表达式

然后您需要注意正则表达式中的特殊字符:{和}是重复n次的量词,如果您希望它们按字面意思,请将它们转义\\{和\\}

因此,如果要匹配像730{whatever}这样的字符串,请使用以下正则表达式:

 "730"\s+\{([^}]+)\}
或在Java中:

 String patternString = "\"730\"\\s+\\{([^}]+)\\}";
例如:

    String str = "\"730\" { \"installdir\" \"C:\\Program Files (x86)\\Steam\\steamapps\\common\\Counter-Strike Global Offensive\" \"HasAllLocalContent\" \"1\" \"UpToDate\" \"1\" }";
    String patternString = "\"730\"\\s+\\{([^}]+)\\}";
    System.out.println(str.matches(patternString)); // true

您肯定遇到编译时错误?@Braj它在字符文字中表示非法转义字符。@Braj这就是我要查找的部分:730{installdir C:\\Program Files x86\\Steam\\steamapps\\common\\Counter Strike Global HasAllLocalContent 1 Update 1}现在它在主线程java.util.regex.PatternSyntaxException中表示异常:索引7 730\s+{[^}]+}附近非法重复vdfContentsString的值是多少?现在理论上应该找到一个,但没有匹配项。请看一下示例代码。这就是你要做的吗?这正是我要做的。它适用于那个文件,但当我使用真实文本文件时,它不再适用了。问题在于String.matches匹配整个字符串,而不仅仅是它的一部分。看看更新吧,虽然理论上应该是这样的,但它找不到匹配项。不客气!检查这个:。。单击Java并查看正则表达式是如何链接到Java字符串的matched@user3347446如果正在读取文本文件,请修剪字符串line=line.trim;读取一行后,删除换行符,或向上面的正则表达式中添加?s.*或[\r\n]*以匹配换行符。