我需要替换PHP字符串中<...>
中包含的字符。我使用preg_replace()
执行此操作,但我需要修改此代码以执行更多操作。
这是我的代码:
$templateText = "Hi <John> , This is a test message from <9876543210>";
$repl = "test";
$patt = "/\<([^\]]+)\>/";
echo $template_sample = preg_replace($patt, $repl , $templateText);
以上代码将<...>
中test
中包含的第一个值替换为Hi test
。
E.g。上面的代码将显示如下字符串:
test
但是,只有在999999999
不是数字时才需要将其替换为Hi test , This is a test message from 999999999
。如果所附值为数字,则应将其替换为tf.trainable_variables
。
我期待的是:
tf.global_variables
答案 0 :(得分:1)
您可以使用preg_replace_callback
的正则表达式匹配>
之间的<...>
以外的数字或任何0 +字符,并使用自定义逻辑进行替换:
$templateText = "Hi <John> , This is a test message from <9876543210>";
$template_sample = preg_replace_callback("/<(?:(\d+)|[^>]*)>/", function($m) {
return !empty($m[1]) ? '999999999' : 'test';
}, $templateText);
echo $template_sample; // => Hi test , This is a test message from 999999999
请参阅PHP demo。
模式详情
<
- 文字<
(这不是特殊的正则表达式,不要逃避)(?:(\d+)|[^>]*)
- 与以下任意一项匹配的非捕获组:
(\d+)
- 第1组:一个或多个数字|
- 或[^>]*
- 除>
>
- 文字>
(这不是特殊的正则表达式,不要逃避)。替换是一个回调函数,它获取$m
匹配对象并检查组1是否匹配。如果第1组值不为空(!empty($m[1])
),则匹配将替换为999999999
,而替换为test
。