繁体   English   中英

PHP preg_match从字符串末尾开始

[英]PHP preg_match starting from end of string

我正在尝试捕获字符串模式,但要从字符串的末尾开始。

如果我有一个像这样的字符串:

"Hi, I saw you on tv yesterday. On Mon 4 P.M Alice wrote:"

捕获单词"on"和单词"wrote:"之间的所有内容的常规preg_match将捕获"on tv yesterday. On Mon 4 PM Alice wrote:" 我要捕获"On Mon 4 PM Alice wrote:"

我无法使用preg_match_all解决它,因为它只会与第一个匹配。

我的模式:

/(<div>|<br>|<br \/>|<br\/>)\s*on\s(.*)wrote:/i

我也尝试用strrpos解决它,但是它不尊重空格。

谢谢马丁

您可以将基于lookahead的正则表达式用于preg_match输入中的最后一个匹配项:

/\bon\b(?:(?!\bon\b).)*?\bwrote\b/i

正则演示

(?:(?!\\bon\\b).)*? 为排除模式基于正则表达式将之间不匹配的文本on ,并wrote ,当on没有它们之间出现从而确保最后一场比赛中输入相匹配

我认为最好的解决方案是使用我在这里找到的这些不错的功能。 就我个人而言,我经常使用它,并且它从未让我失望。

<?php    
function strrevpos($instr, $needle)
    {
        $rev_pos = strpos (strrev($instr), strrev($needle));
        if ($rev_pos===false) return false;
        else return strlen($instr) - $rev_pos - strlen($needle);
    };
     function before ($this, $inthat)
        {
            return substr($inthat, 0, strpos($inthat, $this));
        };
     function between ($this, $that, $inthat)
        {
            return before ($that, after($this, $inthat));
        };
?>

然后,您可以轻松地执行以下操作:

$string = 'Hi, I saw you on tv yesterday. On Mon 4 P.M Alice wrote:"';
$result = between ('On', 'wrote:', $string);
echo $result; //should echo "Mon 4 P.M Alice"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM