2

我有一些文字(在这种特定情况下$expression,有时它很长。我想以相同的方式输出文本,除了输出numbers %粗体。有时它的拼写像3%,有时有一个空格像123 %

<?php
$expression = 'here we got a number 23 % and so on';
$tokens = "([0-9]+)[:space:]([\%])";
$pattern = '/[0-9][0-9] %/';

$keyword = array($pattern);
$replacement = array("<b>$keyword</b>");
echo preg_replace($keyword, $replacement, $expression);
?>

这就是我所拥有的,但我不确定我做错了什么。它在行上输出一个错误$replacement = array("<b>$keyword</b>");,然后输出实际的字符串,除了它用number%替换<b>Array</b>

4

3 回答 3

2

您面临一个(不需要的)数组到字符串的转换。在开发中始终使警告/通知可见,PHP 会告诉您这种情况发生(以及发生在何处)。

还要再看一下preg_replace手册页,它显示了替换的正确语法。特别关注替换参数中关于反向引用的部分。

$replacement = array("<b>\\0</b>");
于 2013-04-19T20:46:16.283 回答
2

尝试这个

$expression = 'here we got a number 23 % and so on';
var_dump(preg_replace('/(\d+\s*\%)/', "<b>$1</b>", $expression));
于 2013-04-19T20:48:59.003 回答
0

您的模式和替换错误,您需要模式中的一个组才能在替换中有一个“变量”占位符。查看preg_replace 手册了解更多详情。

我用一个解决方案创建了这个要点,上面的代码:

<?php

$expression = 'here we got a number 23 % and so on';
$pattern = '/(\d+ %)/';
$replacement = '<b>$1</b>';
echo preg_replace($pattern, $replacement, $expression);
于 2013-04-19T21:20:36.827 回答