regex - 使用正则表达式过滤匹配模式

标签 regex perl filter

我对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) 断言右边不是非空白字符

Regex demo

或者使用非贪心点变体

\bchild \K.+?(?= child|$)

Regex demo

关于regex - 使用正则表达式过滤匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59285354/

相关文章:

regex - 用 <pre> 标签内的方括号 (<>) 替换除 <pre> 标签内的换行符

python - 属性错误: 'NoneType' object has no attribute 'group' Can't Parse (Python)

macos - Perl GUI 调试器 - OSX

javascript - Angular : How to filter in views with JSON values

regex - Matlab:查找字符串模式并将其替换为随机字符串

javascript - JavaScript 中的字符串构建和连接

perl - 如何在 Perl 中访问简单的 SOAP 服务

xml - 使用 XML::Simple 时如何删除魔数(Magic Number)?

Django 模型查询集过滤器作为函数

mysql - 过滤掉 MySQL 中的唯一行