使用preg_replace将$variable替换为字符串。

4

我发现了关于这个话题的几个问题,但没有解决我的目标的方法:

$name = 'Adam';
$line = 'This is (Adam) Eve!';
$newline = preg_replace('/\(|\)/|\$name/','',$line);

我的输出应该是This is Eve... 你有什么想法,我的代码出了什么问题吗?感谢你的帮助!


我在这个问题上找到了几个“问题”。 - user202729
尝试 - \(Adam\)\s.. - Sougata Bose
只需看一眼这个,也许它可以帮助你 访问 - Ankit Singh
3个回答

5
单引号的PHP字符串文字中,变量不会被展开。此外,由于$被转义了,它将作为一个字面字符进行匹配。 \$name匹配$name子字符串,而不是Adam。此外,在|之前的/会使整个模式过早地结束。

也许你想使用

$name = 'Adam';
$line = 'This is (Adam) Eve!';
$newline = preg_replace("/\(|\)|$name/",'',$line);
echo $newline;

查看 PHP演示。为了消除Eve前的空格,请在模式中$name之前添加\s*以匹配0个或多个空白字符。
另一种选择:
preg_replace("/\s*\($name\)/",'','This is (Adam) Eve!')

请查看另一个PHP演示

在这里,

  • \s* - 匹配0个或多个空格字符
  • \( - 一个(字符
  • $name - $name变量内的文本
  • \) - 一个文字)字符。

2
请使用strtr函数代替正则表达式。
$name = 'Adam';
$line = 'This is (Adam) Eve!';
$line = strtr($line, array('(' => '',$name=>'', ')' => ''));

1
首先,您可能想了解PHP中的双引号和单引号字符串
然后,您的正则表达式格式不正确,也不是您想要的。
/\(|\)/|\$name/

你的正则表达式有一个语法错误,即在管道符号之前和括号关闭后使用斜杠 ) / |。它没有转义,也是正则表达式的转义字符。 (这意味着它还出现在您的正则表达式的开头和结尾。)您需要先删除它。

您将获得一个看起来像这样的正则表达式:/\(|\)|\$name/。 使用它,您的函数调用具有以下逻辑:

  1. 删除所有开括号
  2. 或删除所有闭括号
  3. 或删除字符串$name

这显然不是您想要的结果。 您想要删除由括号包围的变量$name中的所有出现。

可以通过以下函数调用实现:

$newline = preg_replace("/\($name\)/", '', $line);

如果您想使括号变为可选项,请使用问号运算符来指示它们不是必需的:
$newline = preg_replace("/\(?$name\)?/", '', $line);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接