gpt4 book ai didi

php - 如何在内容处置 header 中预匹配所有三种情况?

转载 作者:行者123 更新时间:2023-12-04 15:32:09 25 4
gpt4 key购买 nike

我正在尝试解码内容配置 header (来自 curl)以使用以下正则表达式获取文件名:

<?php
$str = 'attachment;filename="unnamed.jpg";filename*=UTF-8\'\'unnamed.jpg\'';
preg_match('/^.*?filename=(["\'])([^"\']+)\1/m', $str, $matches);

print_r($matches);

因此,如果文件名在单引号或双引号中它会匹配,但如果文件名周围没有引号(这可能会发生),它会失败

$str = 'attachment;filename=unnamed.jpg;filename*=unnamed.jpg';

现在我正在使用两个正则表达式(带有 if-else),但我只是想了解是否可以在单个正则表达式中执行此操作?仅供我自己学习掌握正则表达式。

最佳答案

我将使用 branch reset 功能 (?|...|...|...) 提供更易读的模式并避免创建报价的捕获组。在分支重置组中,每个捕获组的每个备选方案都具有相同的编号:

if ( preg_match('~filename=(?|"([^"]*)"|\'([^\']*)\'|([^;]*))~', $str, $match) )
echo $match[1], PHP_EOL;

无论哪种选择成功,捕获总是在组 1 中。

关于php - 如何在内容处置 header 中预匹配所有三种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48240521/

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