Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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';s preg#U replace函数';替换参数?_Php_Regex - Fatal编程技术网

是否可以在PHP';s preg#U replace函数';替换参数?

是否可以在PHP';s preg#U replace函数';替换参数?,php,regex,Php,Regex,下面是我想用其他东西替换的一些PHP Ks. <?kys(1959,"kysymys 1959")?>. Ks. <?kys(1959)?>. Ks。 Ks。 我有一个正则表达式,它既可以找到,也可以很好地工作: <\?kys\((\d+)(,"([\s\S]+)")?\)\?> 我用Regex101.com测试(并设计)了它: 所以至少会有匹配的1美元。但也可以有2美元和3美元的匹配。是否可以让preg_re

下面是我想用其他东西替换的一些PHP

Ks. <?kys(1959,"kysymys 1959")?>.
Ks. <?kys(1959)?>.
Ks。
Ks。
我有一个正则表达式,它既可以找到,也可以很好地工作:

<\?kys\((\d+)(,"([\s\S]+)")?\)\?>

我用Regex101.com测试(并设计)了它:

所以至少会有匹配的1美元。但也可以有2美元和3美元的匹配。是否可以让
preg_replace
用以下逻辑替换匹配项:如果$3,则使用$3;否则使用$1?

您可以使用

见:

$str='Ks。
Ks.';

$re='/Use
preg\u replace\u callback
No,因为它将连接两个匹配项,这不是我想要的。我要么要,要么要。
$str = 'Ks. <?kys(1959,"kysymys 1959")?>.
Ks. <?kys(1959)?>.';
$re = '/<\?kys\((\d+)(?:,"([^"]+)")?\)\?>/';

echo preg_replace_callback($re, function($m) {
    return empty($m[2]) ? $m[1] : $m[2];
}, $str);