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

为什么每次比赛都不重复这个正则表达式捕获组?

齐英韶
2023-03-14

我正在regex101上测试这个。通用域名格式

正则表达式^\([0-9A-Za-z-])(?:\([0-9A-Za-z-])*$

测试字符串:测试条。baz bz。fd。zz

字符串匹配,但“匹配信息”框显示只有两个捕获组:

匹配1 1。[1-9]'beta bar'2.[20-22]'zz'

我期待着所有这些捕捉:

  1. β-bar
  2. baz-bz
  3. fd
  4. zz

为什么周期之间的每个标识符都没有被识别为自己捕获的组?

共有1个答案

曾枫
2023-03-14

发生这种情况的原因是,当在捕获组上使用量词并捕获n次时,只有最后捕获的文本存储在缓冲区中并在末尾返回。

你可以用一个简单的正则表达式preg_split你拥有的字符串,而不是匹配这些部分

$str = "+beta-bar.baz-bz.fd.zz";
$a = preg_split('/[+.]/', $str, -1, PREG_SPLIT_NO_EMPTY);

参见IDEONE演示

结果:

Array
(
    [0] => beta-bar
    [1] => baz-bz
    [2] => fd
    [3] => zz
)
 类似资料:
  • 我有以下文字: 我想匹配每个分子,包括它的系数。下面的正则表达式几乎正常工作,但是空格字符,就在最后一次匹配之前,正在匹配,这不应该。这是我正在使用的正则表达式:

  • 问题内容: 我正在使用Java的正则表达式库。我想针对以下格式验证字符串: 数字的数量未知。我想确保该字符串中至少有一个数字,并且每两个数字之间用逗号分隔。我也想从字符串中获取数字。 ( 注意: 这只是一个简化的示例,string.split无法解决我的实际问题) 我写了以下正则表达式: 验证部分起作用。但是,当我尝试提取数字时,我得到了2组: regex101版本:https://regex10

  • 我有一个字符串,可以通过以下方式格式化: 我试图(分别)捕获: 这是我的正则表达式:(也可能是,因为我不关心完整的捕获,只关心它的各个部分)。它捕获: 或(备用) 我不太明白如何让重复捕获组捕获所有单个实例,而不是整个事物,并且只是最后一个实例或只是最后一个实例。

  • 你知道这里怎么了吗? 我想捕获“”之间的组。例如,如果字符串为 匹配器应捕获:

  • 问题内容: 在下面的代码段中,匹配结果中的 非捕获组应被忽略, 结果应该是。 但是,我得到了匹配结果。仅当我指定group(2)时才显示。 问题答案: 并返回整个比赛。随后的组是实际的捕获组。 如果您想要相同的行为:

  • 假设我有这个虚拟URL,我需要提取植物及其颜色作为 下面的I have正在按预期捕获我需要的元素,但是当我的URL中的植物少于4株时,它无法捕获任何东西。底部有一个指向regex测试员的链接,其中有示例代码和URL,您可以使用。 如何修改这个正则表达式,使其动态工作,从而在不需要静态URL结构的情况下捕获可用内容。现在,假设我最多只能捕获4株植物(8组) https://regex101.com/