gpt4 book ai didi

php - 正则表达式问题 : Can't match a variable length pattern

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

我对正则表达式有问题,使用 preg_match_all() 来匹配可变长度的内容。

我要匹配的是“拥堵”一词后的交通状况我想出的是这个正则表达式模式:

Congestion\s*:\s*(?P<congestion>.*)

然而,它会提取第一个实例一直到整个主题的末尾,因为 .* 会匹配所有内容。但这不是我想要的,我希望它作为 3 个实例单独匹配。

现在,由于拥塞背后的单词可能具有可变长度,我无法真正预测中间有多少单词和空格来得出更严格的\w*\s*\w* 匹配等。

关于我如何从这里开始的任何线索?

Highway : Highway 26
Datetime : 18-Oct-2010 05:18 PM
Congestion : Traffic is slow from Smith St to Alice Springs St

Highway : Princes Highway
Datetime : 18-Oct-2010 05:18 PM
Congestion : Traffic is slow at the Flinders St / Elizabeth St intersection

Highway : Eastern Freeway
Datetime : 18-Oct-2010 05:19 PM
Congestion : Traffic is slow from Prince St to Queen St

编辑清晰

这些格式非常漂亮的文本实际上是通过格式非常糟糕的 html 电子邮件收到的。它在这里和那里包含随机换行符,例如“拥塞:从 Prince\nSt 到 Queen St 的交通\n 很慢”。

因此,在处理电子邮件时,我剥离了所有 html 代码和随机换行符,并将它们 json_encode() 成一个非常长的单行字符串,没有换行符...

最佳答案

通常,正则表达式匹配是基于行的。正则表达式假定您的字符串是一行。您可以使用 m” (PCRE_MULTILINE) flag改变这种行为。然后你可以告诉 PHP 只匹配到行尾:

preg_match('/^Congestion\s*:\s*(?P<congestion>.*)$/m', $subject, $matches);

有两点需要注意:首先,模式被修改为包含行开始 (^) 和行结束 ($) 标记。其次,该模式现在带有 m 修饰符。

关于php - 正则表达式问题 : Can't match a variable length pattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3958133/

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