首页 > 解决方案 > 我想与正则表达式完全匹配 2 次

问题描述

我有类似这个字符串的东西。

XXXX^^^141409i1^^^XXXX。

我想匹配^一组中的这 3 个,并且该组恰好匹配 2 次。我写了这个,但它似乎不起作用。

(?:(\^){3}){2}

编辑

我必须拆分它并提取中间的数字。关键是该组应该恰好由 3^次和 2 次组成。如果第一组只有 1 个或 2 个^,它将停止匹配。该字符串是用户输入,例如,如果他输入的字符串多于该字符串,XXXX^^^141409i1^^^XXXX^^^^XXXX则它不应该匹配最后一组,只匹配前 2 个。(对不起,如果我太模棱两可了。)

编辑2

练习的重点是拆分字符串并获取中间的数字,我写了这一行,但问题是它匹配每个 ^^^,我只想精确匹配 2 次。

String[] split = s.split("(\\^){3}"); 

标签: javaregex

解决方案


如果我正确理解你想要什么,我希望这会对你有所帮助:

String input = "XXXX^^^141409i1^^^XXXX^^^^XXXX";
Pattern pattern = Pattern.compile(".*?\\^{3}(\\w+)\\^{3}");
Matcher matcher = pattern.matcher(input);

if (matcher.find()) {
    System.out.println("The number in the middle: " + matcher.group(1));
}

输出:

The number in the middle: 141409i1

在这里你可以看到它是如何工作的:https ://regexr.com/51r9e


推荐阅读