我对perl中的正则表达式不是很熟悉。
我想从字符串中过滤名称,例如“child mick jagger child john wayne child archimedes
”在标签“child
”之间。
结果应该是:
mick jagger
john wayne
archimedes
字符串中名称的数量是可变的。
我的 perl 程序:
#!/usr/bin/perl
use strict 'vars';
use strict 'subs';
my ($x);
my $s="child mick jagger child john wayne child archimedes";
my @f=$s=~/(child.+(?!child))/igs;
foreach $x (@f)
{
print "$x\n";
};
程序没有运行。有人可以帮忙吗?
最佳答案
您可能会使用:
\bchild \K(?:(?!child).)*(?!\S)
\bchild
匹配 child 前面有一个单词边界,后面有一个空格\K
忘记匹配的内容(?:(?!child).)*
匹配除换行符之外的任何字符,换行符后不跟 child(?!\S)
断言右边不是非空白字符
或者使用非贪心点变体
\bchild \K.+?(?= child|$)
关于regex - 使用正则表达式过滤匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59285354/