gpt4 book ai didi

php - 棘手的问题 : How to order results from a multiple regexes

转载 作者:行者123 更新时间:2023-12-03 23:04:19 24 4
gpt4 key购买 nike

我目前在一个 preg_match 中使用 3 种不同的正则表达式,使用或符号 |将他们分开。这非常有效。然而,第一个和第二个正则表达式具有相同类型的输出。例如[0] 源文本 [1] 数字金额 [2] 名称 - 但是最后一个,因为它使用不同的源文本排列,结果是:[0] 源文本 [1] 名称 [2] 数字金额。

    preg_match('/^Guo (\d+) Cars @(\w+)|^AV (\d+) Cars @(\w+)|^@(\w+) (\d+) [#]?av/i', $source, $output);

由于 Name 可以是数字,我无法进行简单的检查来查看它是否是数字。有没有办法可以切换正则表达式中的顺序或识别它也匹配的正则表达式。速度在这里至关重要,所以我不想使用 3 个单独的 preg_match 语句(以及更多)。

最佳答案

三个独立的正则表达式不一定会更慢。一条大语句将意味着正则表达式引擎进行大量回溯。正则表达式优化的关键是让引擎尽快失效。您是否做了一些基准测试来将它们分开?

根据您的情况,您可以使用 PCRE的命名捕获 (?<name>match something here)并替换为 ${name}而不是\1 。我不是 100% 确定这适用于 preg_replace 。我知道preg_match不过,确实可以正确存储命名捕获。

PCRE 需要使用 PCRE_DUPNAMES 进行编译选项对于您的情况(如 RoBorg 的帖子)有用。我不确定 PHP 编译的 PCRE DLL 文件是否设置了该选项。

关于php - 棘手的问题 : How to order results from a multiple regexes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/610815/

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