我想要一个正则表达式匹配行首的某些内容,然后匹配(并返回)所有其他单词。例如,给定这一行:
$line = "one two three etc";
我想要这样的东西(不起作用):
@matches= $line=~ /^one(?:\s+(\S+))$/;
返回到@matches,单词“二”、“三”、“等”。
我不想知道如何得到这些词。我想用正则表达式来做。看起来很简单,但我一直无法提出解决方案。
最佳答案
您不能有未知数量的捕获组。如果您尝试重复捕获组,最后一个实例将覆盖捕获组的内容:
^one(?:\s+(\S+))+$
etc
或者:
^one\s+(\S+)\s+(\S+)\s+(\S+)$
two
three
etc
我建议要么捕获整个组,然后按空格拆分:
^one\s+((?:\S+\s*)+)$
two three etc
或者您可以进行全局匹配并使用
\G
和 \K
:(?:^one|(?<!\A)\G).*?\K\S+
two
three
etc
关于regex - perl regex 捕获重复组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25986557/