Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用preg#u replace时,如果$2不',则仅使用$1(在替换中);不存在_Php_Preg Replace - Fatal编程技术网

Php 使用preg#u replace时,如果$2不',则仅使用$1(在替换中);不存在

Php 使用preg#u replace时,如果$2不',则仅使用$1(在替换中);不存在,php,preg-replace,Php,Preg Replace,我目前正在使用此代码片段将文本从[[foo]]更改为完整的HTMLa链接 $var = preg_replace('/\[\[((.*?)(\|(.*?))?)\]\]/', '<a href="https://foobar.com/$1">$1</a>', $var); 我在想怎么处理这件事时遇到了点麻烦,希望你们能帮上忙 提前谢谢 您可以使用并测试回调中是否存在第二个匹配项(如果第一个匹配项不存在,则返回到第一个匹配项): $var='[[foo

我目前正在使用此代码片段将文本从
[[foo]]
更改为完整的HTML
a
链接

$var = preg_replace('/\[\[((.*?)(\|(.*?))?)\]\]/', '<a href="https://foobar.com/$1">$1</a>', $var);
我在想怎么处理这件事时遇到了点麻烦,希望你们能帮上忙

提前谢谢

您可以使用并测试回调中是否存在第二个匹配项(如果第一个匹配项不存在,则返回到第一个匹配项):

$var='[[foo | bar]];
$var=preg\u replace\u回调(
'/\[\[(?.*?)(?:\|(?.*?))?]]/',
静态函数(数组$matches):字符串{
$uri=$matches['uri'];
$text=$matches['text']??$uri;
返回“”;
},
$var
);
echo$var;//

注意:我随意稍微修改/优化了您的正则表达式(删除不需要的捕获括号、反斜杠,并添加一些命名捕获)。

您可以在回调中使用并测试是否存在第二个匹配项(如果不存在,则返回到第一个匹配项):

$var='[[foo | bar]];
$var=preg\u replace\u回调(
'/\[\[(?.*?)(?:\|(?.*?))?]]/',
静态函数(数组$matches):字符串{
$uri=$matches['uri'];
$text=$matches['text']??$uri;
返回“”;
},
$var
);
echo$var;//


注意:我随意稍微修改/优化了您的正则表达式(删除不需要的捕获括号、反斜杠,并添加一些命名捕获)。

@penguinstyles您取消选中此答案的原因是什么?@penguinstyles您取消选中此答案的原因是什么?
<a href="https://foobar.com/$1">$2</a>
$var = '[[foo|bar]]';

$var = preg_replace_callback(
    '/\[\[(?<uri>.*?)(?:\|(?<text>.*?))?]]/',

    static function (array $matches): string {
        $uri = $matches['uri'];
        $text = $matches['text'] ?? $uri;

        return "<a href=\"https://foobar.com/{$uri}\">{$text}</a>";
    },

    $var
);

echo $var;  // <a href="https://foobar.com/foo">bar</a>