Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 regexp:仅匹配指定符号内的单独数字_Java_Regex - Fatal编程技术网

Java regexp:仅匹配指定符号内的单独数字

Java regexp:仅匹配指定符号内的单独数字,java,regex,Java,Regex,我在java中使用正则表达式,不知道如何只匹配预定义符号中的数字 下面是我的一个字符串的示例: some text [1] some and numbers 12, 14 and more text [11,1] another text [3,6, 7] and some more text [5;16] 真的可以只检索方括号中的数字吗?在这种情况下:1113677516 这不应与方括号中的任何其他符号相匹配 我已经尝试了几种选择,包括: Pattern k = Pattern.compil

我在java中使用正则表达式,不知道如何只匹配预定义符号中的数字

下面是我的一个字符串的示例:

some text [1] some and numbers 12, 14 and more text [11,1] another text [3,6, 7] and some more text [5;16]
真的可以只检索方括号中的数字吗?在这种情况下:1113677516 这不应与方括号中的任何其他符号相匹配

我已经尝试了几种选择,包括:

Pattern k = Pattern.compile("\\[(\\d+)\\]");
但这只为一个数字而不是其他数字提供了工作。我试着把它们分组,比如
(?:\\[)里面的一些代码(?:\\])
,但没有成功

更新

分组解决方案:
Pattern k=Pattern.compile(\\[(\\d+)(:)?(\\d+)\])

但是产生括号和逗号作为输出。

您可以选择这些数字,您可以使用以下正则表达式:

(?:\G|\[)[,;\s]*(\d+)
它只选择数字

解释
  • (?:\G | \[)
    匹配上一个匹配的结束位置或一个开口括号
  • [,;\s]*
    匹配逗号、分号或空格零或多次
  • (\d+)
    捕获数字

您将拥有组1中的数字。

您可以选择这些数字,您可以使用以下正则表达式:

(?:\G|\[)[,;\s]*(\d+)
它只选择数字

解释
  • (?:\G | \[)
    匹配上一个匹配的结束位置或一个开口括号
  • [,;\s]*
    匹配逗号、分号或空格零或多次
  • (\d+)
    捕获数字

您将在第1组中列出这些数字。

只是为了提供一种不同的解决方法,当问题变得更加复杂时,这种方法可能会派上用场:

实现目标的一个更简单的方法是将匹配分为两个阶段

Pattern areas = Pattern.compile("\\[.*?\\]");
这将导致
[1]
[11,1]
[3,6,7]
[5;16]

那么,对于任何一种情况,请使用

Pattern numbers = Pattern.compile("\d+");

与实际数字相匹配。

只是为了提供一种不同的解决方法,当它变得更加复杂时可能会派上用场:

实现目标的一个更简单的方法是将匹配分为两个阶段

Pattern areas = Pattern.compile("\\[.*?\\]");
这将导致
[1]
[11,1]
[3,6,7]
[5;16]

那么,对于任何一种情况,请使用

Pattern numbers = Pattern.compile("\d+");

以匹配实际数字。

可能这一个会对您有所帮助

试试看:

 Pattern k = Pattern.compile("\\[(\\d+)(;?)(\\d+)\\]");

也许这个能帮你

试试看:

 Pattern k = Pattern.compile("\\[(\\d+)(;?)(\\d+)\\]");

[3,6,7]
还是
[3,6,7]
?是
[3,6,7]
还是
[3,6,7]
?嗯,\G和\K在Java中使用模式类吗?试过:
(?:G\\\[)[,;\\s]*K\\d+
和with\\G\\K
\G
应该可以,但是
\K
没有包含在中。但是没有明确检查它。你是对的,它不受支持。我已经更新了我的答案。cc@vitaliMatcher.group(1)只给出了数字。完美。嗯,\G和\K在Java中使用模式类吗?尝试过:
(?:G\\\\\[)[,;\\s]*K\\d+
和with\\G\\K
\G
应该可以,但是
\K
没有包含在中。但是没有明确检查它。你是对的,它不受支持。我已经更新了我的答案。cc@Vitaliymatcher.group(1)只给出了数字。非常好。