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

如何用正则匹配指定字母并过滤其余字母(PHP场景)

解决方法

给定字符串 $string='letters=ABCD';,要保留"letters="并提取其中的B/C(过滤A/D),最终输出letters=BC,可以用以下几种方式实现:

方法一:分步匹配+过滤

先匹配出"letters="后面的所有字母,再过滤掉非B/C的字符:

$string='letters=ABCD';
// 匹配letters=后的所有大写字母
preg_match('/letters=([A-Z]+)/', $string, $matches);
// 只保留B和C,移除其他字符
$filtered_chars = preg_replace('/[^BC]/', '', $matches[1]);
// 拼接结果
$result = 'letters=' . $filtered_chars;
echo $result; // 输出:letters=BC

方法二:直接提取所有B/C字符

用preg_match_all抓取字符串里所有的B和C,再拼接前缀:

$string='letters=ABCD';
// 匹配所有B/C字符
preg_match_all('/[BC]/', $string, $matches);
// 把匹配到的字符拼接成字符串
$bc_str = implode('', $matches[0]);
// 生成结果
$result = 'letters=' . $bc_str;
echo $result; // 输出:letters=BC

方法三:正则回调替换

用preg_replace_callback一步完成匹配和过滤:

$string='letters=ABCD';
$result = preg_replace_callback(
    '/letters=([A-Z]+)/',
    function($match) {
        // 对捕获到的字母部分过滤,只留B/C
        return 'letters=' . preg_replace('/[^BC]/', '', $match[1]);
    },
    $string
);
echo $result; // 输出:letters=BC

为什么之前的尝试失败

  • 第一个正则 /(letters=([BC]+))/:它要求letters=后面必须直接跟着B/C字符,而原字符串开头是A,所以无法匹配到任何内容,自然拿不到结果。
  • 第二个正则 /<FORMAT=[A-Z]+[BIU]+/:完全偏离需求,不仅匹配的前缀是FORMAT=(原字符串是letters=),而且目标字符是BIU,和要求的BC无关,当然过滤不掉A。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:10:04