gpt4 book ai didi

regex - 关闭贪婪在此正则表达式中不起作用

转载 作者:行者123 更新时间:2023-12-02 02:26:35 24 4
gpt4 key购买 nike

我正在尝试运行以下搜索(通过在 perl 中添加/s 标志或在 vim 中将其替换为 \_. 来匹配换行符):

/<output_channels>.*(?=Story).*?<\/output_channels>/

然而?没有像往常一样关闭贪婪 - 谁能解释为什么?例如,它匹配以下文件的全部内容而不仅仅是第一个元素:

<output_channels>
<output_channel>RSS</output_channel>
<output_channel>Story</output_channel>
</output_channels>

<output_channels>
<output_channel>RSS</output_channel>
</output_channels>

抱歉,如果我遗漏了一些明显的东西。

最佳答案

我把你的示例文本放入一个vim缓冲区,然后执行命令

:%!perl -e '$text = join("", <STDIN>); $text =~ /<output_channels>.*(?=Story).*?<\/output_channels>/s; print $&;'

结果只是第一个 XML block 。我想这就是你想要的?

请注意,我在正则表达式中对 / 进行了转义。除此之外,它与您的问题中给出的相同。

另请注意,等效的 vim RE 将是(已测试,有效):

<output_channels>\_.*\(story\)\@=\_.\{-}<\/output_channels>

参见 :help perl-patterns了解 perl 和 vim RE 之间的差异。

进一步注意 parsing heirarchical markup with regexps has been known to reawaken ancient demons .

关于regex - 关闭贪婪在此正则表达式中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675062/

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