当我添加少于"<"符号
$str = 'test';
$str = preg_replace('@(.*)@isu', '<$1', $str);
echo $str; // outputs ""
它应输出<test
,但不输出任何内容。
当我不添加角色时,它可以正常工作。
$str = 'test';
$str = preg_replace('@(.*)@isu', '$1', $str);
echo $str; // outputs "test"
我试图逃避它
$str = 'test';
$str = preg_replace('@(.*)@isu', '<\\\\$1', $str);
echo $str; // outputs "<\test"
我无法在php手册中找到任何相关内容,而谷歌只是吐出无关的SO问题。
我想知道为什么这不起作用?
PHP 5.4.22
答案 0 :(得分:3)
在正则表达式中使用行start and end anchors
:
$str = 'test';
$str = preg_replace('@^(.*)$@isu', '<$1', $str);
echo $str;
或使用.+
:
$str = preg_replace('@(.+)@isu', '<$1', $str);
OR与.*
指定最大替换次数:
$str = preg_replace('@(.*)@isu', '<$1', $str, 1);
<强>输出:强>
<test
问题是使用.*
preg_replace
匹配并替换输入字符串两次,一次用于整个输入字符串,一次用于结束(空字符串)。
答案 1 :(得分:3)
我认为您正在检查浏览器的输出。这就是它做这种行为的原因。从控制台它完美地工作。因此,我相信当您从浏览器查看html源代码时,您将找到所有内容。
此外,您可以将<
替换为<
答案 2 :(得分:0)
不清楚<\\\\$1
如何逃避小于(<
)符号?你试过这个吗?
$str = 'test';
$str = preg_replace('@(.*)@isu', '\<$1', $str);
echo $str;
编辑由于已经发现您可以在浏览器的源代码中查看<test
,因此我按如下方式调整了代码,以使输出在浏览器中可读:
$str = 'test';
$str = preg_replace('@(.*)@isu', "<$1", $str);
echo '<pre>';
echo htmlentities($str);
echo '</pre>';
但是那个输出:
<test<
正如用户anubhava
所解释的那样,您可以在1
的末尾添加preg_replace
以仅返回第一个匹配项:
$str = preg_replace('@(.*)@isu', "<$1", $str, 1);
然后输出以下原始海报所需的内容:
<test