regex - perl regex 捕获重复组

标签 regex perl

我想要一个正则表达式匹配行首的某些内容,然后匹配(并返回)所有其他单词。例如,给定这一行:

$line = "one two three etc";

我想要这样的东西(不起作用):
@matches= $line=~ /^one(?:\s+(\S+))$/;

返回到@matches,单词“二”、“三”、“等”。

我不想知道如何得到这些词。我想用正则表达式来做。看起来很简单,但我一直无法提出解决方案。

最佳答案

您不能有未知数量的捕获组。如果您尝试重复捕获组,最后一个实例将覆盖捕获组的内容:

  • 表达式: ^one(?:\s+(\S+))+$
  • 捕获 #1:etc

  • 或者:
  • 表达式: ^one\s+(\S+)\s+(\S+)\s+(\S+)$
  • 捕获 #1:two
  • 捕获 #2:three
  • 捕获 #3:etc


  • 我建议要么捕获整个组,然后按空格拆分:
  • 表达式: ^one\s+((?:\S+\s*)+)$
  • 捕获 #1:two three etc

  • 或者您可以进行全局匹配并使用 \G\K :
  • 表达式: (?:^one|(?<!\A)\G).*?\K\S+
  • 第 1 场比赛:two
  • 第 2 场比赛:three
  • 第 3 场比赛:etc
  • 关于regex - perl regex 捕获重复组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25986557/

    相关文章:

    Perl:按值降序对哈希值进行排序

    regex - sed - 替换行中的字符

    perl - 我在哪里可以学习高级 (Perl) Gtk2 设计?

    javascript - 正则表达式 - 需要帮助获取字符串的特定部分

    java - JAX-RS @Path 可以指定长度要求吗?

    perl - 将 STDERR 重定向到 select()ed STDOUT

    perl - 为什么在运行 Perl 脚本时会得到 'use: command not found'?

    Perl dbd-sqlite,是否有等同于 .import 函数的函数?

    python - 在 Python 中搜索子字符串的字符排列

    Python 正则表达式卡住输入字符串小