gpt4 book ai didi

perl - 为什么 RegEx 输出错误?

转载 作者:行者123 更新时间:2023-12-02 22:37:42 25 4
gpt4 key购买 nike

当我运行下面的脚本时,我得到

$VAR1 = [
'ok0.ok]][[file:ok1.ok',
undef,
undef,
'ok2.ok|dgdfg]][[file:ok3.ok',
undef,
undef,
undef,
undef,
undef,
undef,
undef,
undef,
undef,
undef,
undef,
undef,
undef
];

我希望得到 ok0.ok ok1.ok ok2.ok ok3.ok 理想情况下还有 ok4.ok ok5.ok ok6.ok ok7.ok>/p>

问题

谁能看出我做错了什么?

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $html = "sdfgdfg[[file:ok0.ok]][[file:ok1.ok ]] [[file:ok2.ok|dgdfg]][[file:ok3.ok |dfgdfgg]] [[media:ok4.ok]] [[media:ok5.ok ]] [[media:ok6.ok|dgdfg]] [[media:ok7.ok |dfgdfgg]]ggg";

my @seen = ($html =~ /file:(.*?) |\||\]/g);

print Dumper \@seen;

最佳答案

我认为否定字符类可以稍微简化事情。明确您的 anchor (文件:或媒体:),并明确终止序列的内容(空格、竖线或右括号)。然后捕获。

我的@seen = $html =~ m{(?:file|media):([^\|\s\]]+)}g;

解释:

my @seen = $html =~ m{
(?:file|media): # Match either 'file' or 'media', don't capture, ':'
( [^\|\s\]]+ ) # Match and capture one or more, anything except |\s]
}gx;

一旦遇到 ]|\s,捕获就会停止。

关于perl - 为什么 RegEx 输出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11204396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com