当前位置: 首页 > 知识库问答 >
问题:

正则表达式将界限取入组[duplicate]

苏振国
2023-03-14

我想在特殊的符号界之间对一些字符进行分组,但这个界涉及到分组。不与贪婪、勉强量词相连。

String str1 = "#162xd14a#";
Matcher matcher = Pattern.compile("#(.*?)#").matcher(str1);
if (matcher.matches()) {
    for (int i = 0; i < matcher.groupCount(); i++) {
        System.out.println(matcher.group(i));
    }
}

结果:

#162xd14a#

但我料到:

162xd14a

共有1个答案

姚韬
2023-03-14

来自关于捕获组的官方教程:

还有一个特殊的组,0组,它总是代表整个表达式。此组不包括在GroupCount报告的总数中。

在示例的上下文中:

组1包含第一个(也是唯一)匹配的组:162xd14a

您的正则表达式中有一个组,因此groupcount()返回1

由于<条件,循环在到达组1之前停止

您可能希望将循环条件更改为<=而不是<:

for (int i = 0; i <= matcher.groupCount(); i++) {
    System.out.println(matcher.group(i));
}
 类似资料:
  • 我有3个正则表达式,但当模式匹配时执行相同的操作,所以我考虑将所有三个表达式合并为一个。我尝试了很多,但无法让“|”I.e”或“在我的正则表达式中工作 regex1:<代码>文本。替换(/([\u00A9-\u3299])/g,函数myFunction(x){…} regex2: regex3: 我试过这样做,但它不起作用regex:

  • 问题内容: 我正在解析(种类)表格的名称: 通常有两个项(二项式),但有时有3个或更多。 我写 大部分时间都有效,但偶尔会陷入无限循环。花了一些时间来查找正则表达式匹配中的内容,然后我才意识到这是一个错字,我应该写 正确执行。 我的问题是: 为什么会发生这种循环? 有没有办法在运行程序之前检查类似的正则表达式错误?否则,可能很难在prgram分发之前就将它们捕获并引起问题。 [注意:我不需要物种的

  • 我正在使用以下正则表达式: 我的目标是只验证数字(int和decimal),空格, ( ), 点,AND,OR。其他一切都是不允许的。它看起来像是工作的,但是我对单词边界\bAND\b和\bOR\b Eg有问题。我不能输入ANDWE或EEE或任何组合,但我能做的是AN或A。如何在字符串中只允许两个单词AND或OR?它们在字符串中是可选的。 输入示例 0.10和23-有效 12和(15或0.2)-有

  • 问题内容: 我的数据库中有Markdown格式的文本。我想提取链接并计算我拥有的匹配链接的数量。我可以使用类似于以下的查询来获取包含链接的文本块的列表: 但是,如何进行下一步,仅提取文本的链接部分(括号中的部分)?如果可以得到,则可以计算此特定链接在我的数据集中的次数。 一些样本数据: 我正在使用SQL Server 2012(如果这方面的版本之间存在差异)。 问题答案: 假设实际数据不比所陈述的

  • 我使用这个正则表达式: 要匹配这样的字符串: 分为4组: 问:我如何使第一个组可选,使结果组是一个空字符串? 我想在每种情况下得到4组,如果可能的话。 这种情况下的输入字符串:(第一组后面没有下划线)

  • 你好,堆栈溢出。正如我在上一篇文章中提到的,我正在努力提高正则表达式的水平。今晚我将浏览我的书中的章节,并决定看看我是否可以,如果可能的话,创建多个组。我完全知道正则表达式不是一切的答案,这纯粹是为了让我学习。我正在使用VB. net 输入示例: 现在,这是一个由我自己制作的完整输出来测试。这个表达式的一致因素是总是有一个名字首先只由组成。在花括号内。分隔两个组的主分隔符是在组开始之前,将有一个O