You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP的preg_match_all匹配起始词到多个终止词之间的内容

问题原因

你编写的代码不生效是因为将正则的或运算符|传入了preg_quote()函数中,preg_quote()会自动转义正则语法符号,最终$word2|$word3会被转义为普通字符串Monkey\|Dog,无法实现二选一匹配的逻辑。

正确实现方案

你需要分别对两个结束词做转义处理,再用正则或语法拼接,示例代码如下:

<?php
$sting= "Rabbit Cat Monkey Dog Fox Cow Rabbit Fish Monkey";

$word1 = "Rabbit";
$word2 = "Monkey";
$word3 = "Dog";
// 分别转义两个结束词,用非捕获分组实现二选一匹配
preg_match_all('/'.preg_quote($word1).'(.*?)(?:'.preg_quote($word2).'|'.preg_quote($word3).')/is', $sting, $matches);

print_r($matches[0]);
?>

匹配结果说明

  • 正则中的非贪婪匹配.*?会自动匹配到$word2和$word3中先出现的那个词就停止,刚好满足你的需求
  • 上述代码输出结果为:
    Array
    (
        [0] => Rabbit Cat Monkey
        [1] => Rabbit Fish Monkey
    )
    

如果调整字符串为Rabbit Cat Dog Monkey,则第一个匹配结果会自动变成Rabbit Cat Dog,符合“匹配先出现的结束词”的要求。


内容的提问来源于stack exchange,提问作者Sam Samani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 03:24:03