Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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_Matcher_Lookahead_Regex Group - Fatal编程技术网

Java 带有组的regexp负前瞻

Java 带有组的regexp负前瞻,java,regex,matcher,lookahead,regex-group,Java,Regex,Matcher,Lookahead,Regex Group,我尝试将regexp与负前瞻和组一起使用。不幸的是,它没有按预期工作,所以我需要帮助 我需要解析字符串末尾的大小(英寸),可以是格式“Tony Hawk 39.75”-->39.75”或长度x宽度“Tony Hawk 39.75”x 8.75”-->9.75”x 8.75”。问题是,名称也可以包含数字,例如“AD-37 8.0”。因此,我尝试使用负前瞻,即“空格”不跟在“x”(?!。+\s[x])后面,但返回的结果很奇怪 Pattern regex = Pattern.compile("(?!.

我尝试将regexp与负前瞻和组一起使用。不幸的是,它没有按预期工作,所以我需要帮助

我需要解析字符串末尾的大小(英寸),可以是格式“Tony Hawk 39.75”-->39.75”或长度x宽度“Tony Hawk 39.75”x 8.75”-->9.75”x 8.75”。问题是,名称也可以包含数字,例如“AD-37 8.0”。因此,我尝试使用负前瞻,即“空格”不跟在“x”(?!。+\s[x])后面,但返回的结果很奇怪

Pattern regex = Pattern.compile("(?!.+\\s[x])\\s(\\d+\\.?\\d*\".*)");
String s = "Tony Hawk 39.75\" x 8.75\"";
// or String s = "AD-37 8.0\"";
Matcher m = regex.matcher(s);
if (m.find()) {
    System.out.println(m.groupCount());
    System.out.println(m.group(1));
    System.out.println(m.group(2));
}
当我执行上面的示例时,它返回我的组1“8.75”,我不理解。在这里,我期待《托尼·霍克》

有没有提示我做错了什么?

使用以下模式:

(.+?)\\s(\\d+\\.\\d*\".*)
可能会产生更好的结果:

2 
Tony Hawk
39.75" x 8.75"
例如:


您的代码应该实现什么?你的目标是什么?谢谢你的努力!有时候,解决方案很简单;)请问
(.+?)
是做什么的?thx
(.+?)
定义一个(惰性)捕获组,该组匹配任何字符(换行符除外),在一次和无限次之间,根据需要进行扩展。通过在
+
之后添加
,我们告诉它重复尽可能少的次数,因此当它遇到匹配的其余部分时,它停止捕捉该部分。