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
Java 正确正则表达式_Java_Regex - Fatal编程技术网

Java 正确正则表达式

Java 正确正则表达式,java,regex,Java,Regex,我正在使用Java正则表达式来读取该类型的字符串 "{\n 'Step 1.supply.vendor1.quantity':\"80"\,\n 'Step 2.supply.vendor2.quantity':\"120"\,\n 'Step 3.supply.vendor3.quantity':\"480"\,\n 'Step 4.supply.vendor4.quantity':\"60"\,\n}" 我必须检测类型为的字符串 'Step 2.sup

我正在使用Java正则表达式来读取该类型的字符串

"{\n  'Step 1.supply.vendor1.quantity':\"80"\,\n
      'Step 2.supply.vendor2.quantity':\"120"\,\n
      'Step 3.supply.vendor3.quantity':\"480"\,\n
      'Step 4.supply.vendor4.quantity':\"60"\,\n}"
我必须检测类型为的字符串

'Step 2.supply.vendor2.quantity':\"120"\,\n.
我试图使用正则表达式的模式和匹配器,但我无法找出正确的正则表达式,比如

 <Beginning of Line><whitespace><whitespace><'Step><whitespace><Number><.><Any number & any type of characters><,\n><EOL>.
我总是得到非法状态异常未找到匹配项


我找不到合适的材料来阅读Java正则表达式的好例子。任何帮助都会非常好。谢谢。

正如其他人在评论中所说,您应该真正使用JSON解析器

但是,如果您想了解它如何与正则表达式一起工作,下面是您可以做到的:

  • 以要捕获的行为例:
    步骤1.supply.vendor1.quantity':“80”
  • 将数字替换为
    \\d*
    \\d
    匹配任何数字)
  • 将点替换为
    \\.
    (点需要转义)
  • 在要捕获的零件周围添加一些括号
下面是生成的正则表达式:
“步骤(\\d*)\\.supply\\.vendor(\\d*)\\.quantity':\”(\\d*)\”

现在,使用
Regex
Matcher

String input = "{\n  'Step 1.supply.vendor1.quantity':\"80\"\\,\n";
Pattern pattern = Pattern.compile("Step (\\d*)\\.supply\\.vendor(\\d*)\\.quantity':\"(\\d*)\"");
Matcher matcher = pattern.matcher(input);
while(matcher.find()) {
  System.out.println(matcher.group(1));
  System.out.println(matcher.group(2));
  System.out.println(matcher.group(3));
}
输出:

1 //(corresponds to "Step (\\d*)")
1 //(corresponds to "vendor(\\d*)")
80 //(corresponds to "quantity':\"(\\d*)")

这看起来像JSON格式,你确定不想使用JSON解析库吗?这是JSON,你应该使用JSON解析器…@JoseCifuentes是的,这是JSON格式。从文件中读取数据后,我将其转换为JSONObject。然后获取特定键的值。但是,为了获取密钥的值,我需要像下面这样的JSON数据“Step 2.supply.vendor2.quantity”:“120”,“Step 3.supply.vendor3.quantity”:“480”,即没有\n和\“字符。@DarthAndroid我仍然可以使用JSON解析器为带有这些\n和\”字符的键获取值。我有点困惑。该字符串是来自代码还是来自某些资源(文件/socket/…)?如果它来自您的代码,则应将
\n
视为表示行分隔符的一个字符,而不是两个字符
\
n
,因此在该解析器中,应该能够毫无问题地处理它。您尝试过吗?它是如何运行的?我可以在JSON解析器库中为regex匹配函数使用哪个API?
1 //(corresponds to "Step (\\d*)")
1 //(corresponds to "vendor(\\d*)")
80 //(corresponds to "quantity':\"(\\d*)")