如何在Perl中排除子匹配?

1 regex perl

我必须将一个字符串拆分成包含单词或特殊字符的片段.

假设我有字符串'这是'另一个问题......"'.我想得到的是一个由这些部分组成的数组:('This','is',''','another','problem','...','"').

我在JavaScript中用以下RegExp完成了这个工作正常:

string.match(/([^-\s\w])\1*|[-\w]+/g); // works
Run Code Online (Sandbox Code Playgroud)

在Perl中使用相同的方法不起作用,因为我用来组合连续字符的子模式,我也得到这些匹配:

@matches = $string =~ m/(([^-\s\w])\2*|[-\w]+)/g; # does not work
Run Code Online (Sandbox Code Playgroud)

有没有办法在结果或正则表达式本身中删除子模式/子匹配?

yst*_*sth 5

在你的"不工作"的例子中,我认为你的意思是\ 2,而不是\ 1.

您必须遍历匹配才能执行此操作:

push @matches, "$1" while $string =~ m/(([^-\s\w])\2*|[-\w]+)/g;
Run Code Online (Sandbox Code Playgroud)