() -6ren">
gpt4 book ai didi

regex - 让正则表达式尽可能保持匹配?

转载 作者:行者123 更新时间:2023-12-04 14:50:32 26 4
gpt4 key购买 nike

有没有一种方便的方法来编写一个正则表达式来尽可能多地匹配正则表达式?

例子:

my $re = qr/a ([a-z]+) (\d+)/;

match_longest($re, "a") => ()
match_longest($re, "a word") => ("word")
match_longest($re, "a word 123") => ("word", "123")
match_longest($re, "a 123") => ()

即, $re被认为是一个正则表达式序列,而 match_longest尝试尽可能多地匹配这个序列。从某种意义上说,匹配永远不会失败——这只是匹配成功多少的问题。一旦正则表达式匹配失败, undef对于不匹配的部分。

我知道我可以编写一个函数,它接受一系列正则表达式并创建一个正则表达式来完成 match_longest 的工作。 .下面是这个想法的概述:

假设您有三个正则表达式: $r1 , $r2$r3 .执行 match_longest 工作的单个正则表达式将具有以下结构:
$r = ($r1 $r2 $r3)? | $r1 ($r2 $r3) | $r1 $r2 $r3?

不幸的是,这是正则表达式数量的二次方。有没有可能更高效?

最佳答案

您可以使用正则表达式

$r = ($r1 ($r2 ($r3)?)?)?

每个正则表达式只包含一次。您也可以使用非捕获组 (?:...)在这个例子中不要干扰你原来的正则表达式。

关于regex - 让正则表达式尽可能保持匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7057853/

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