Java 带有组的regexp负前瞻
我尝试将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])后面,但返回的结果很奇怪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("(?!.
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(.+?)
定义一个(惰性)捕获组,该组匹配任何字符(换行符除外),在一次和无限次之间,根据需要进行扩展。通过在+
之后添加?
,我们告诉它重复尽可能少的次数,因此当它遇到匹配的其余部分时,它停止捕捉该部分。