Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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中捕获,就像在C中一样#_Java_C#_Regex_Capture_Regex Group - Fatal编程技术网

正则表达式在Java中捕获,就像在C中一样#

正则表达式在Java中捕获,就像在C中一样#,java,c#,regex,capture,regex-group,Java,C#,Regex,Capture,Regex Group,我需要使用Java重写现有C#/.NET程序的一部分。我对Java不是很精通,我缺少一些处理正则表达式的东西,我只是想知道我是否缺少一些东西,或者Java是否不提供这样的功能 我有这样的数据 2011:06:05 15:50\t0.478\t0.209\t0.211\t0.211\t0.205\t-0.462\t0.203\t0.202\t0.212 我使用的正则表达式模式如下所示: ?(\d{4}:\d{2}:\d{2} \d{2}:\d{2}[:\d{2}]?)\t((-?\d*(\.\d

我需要使用Java重写现有C#/.NET程序的一部分。我对Java不是很精通,我缺少一些处理正则表达式的东西,我只是想知道我是否缺少一些东西,或者Java是否不提供这样的功能

我有这样的数据

2011:06:05 15:50\t0.478\t0.209\t0.211\t0.211\t0.205\t-0.462\t0.203\t0.202\t0.212
我使用的正则表达式模式如下所示:

?(\d{4}:\d{2}:\d{2} \d{2}:\d{2}[:\d{2}]?)\t((-?\d*(\.\d*)?)\t?){1,16}
在.NET中,我可以使用
match.Group[3]访问匹配后的值。捕获[I]

在Java中,我没有发现类似的东西
matcher.group(3)
只返回一个空字符串


如何实现我在C#中习惯的行为?

正如我在评论中提到的,Java只返回多值组拟合的最后一个值。因此,您应该首先使用正则表达式将字符串的最后一部分与以下值隔离:

strg=“0.478\t0.209\t0.211\t0.211\t0.205\t-0.462\t0.203\t0.202\t0.212”

然后只需在选项卡周围拆分:


String[]value=strg.split(\\t”)

应相同。编译你的模式,匹配,就这样。java正则表达式只是普通正则表达式。我很想说“检查您的输入”等等。问题是,当进行多值组拟合时,
(某物)*
(某物){1,16}
,Java只返回拟合中最后拟合的项目。所以我猜在你的情况下,第一组是
2011:06:05 15:50
,第二组是
0.212
,就是这样。@toto:没错,这就是问题所在。此外,我可以在多值组周围加一些括号,如
((something){1,16})
。然后我得到整个字符串
(something){1,16}
匹配,即
0.478\t0.209\t0.211\t0.211\t0.205\t-0.462\t0.203\t0.202\t0.212
。但是我必须再次拆分结果字符串。这不是我认为正确的方法…看看我的答案。我认为这是唯一的出路。但我希望被证明是错的,并看到有人想出一个更优雅的答案。是的,这是我目前暂时的解决办法。也在等待更好的解决方案……;)@signpainter:.NET和Perl 6是目前唯一支持重复组捕获的正则表达式实现。因此,如果您使用的是Java,那么除了这个解决方案之外没有其他选择。