preg_replace $ variable with string

问题描述 投票:3回答:3

我在这个主题上找到了几个问题,但没有针对我的目的的解决方案:

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

我的输出应该是This is Eve ...知道我的代码有什么问题吗?谢谢你的帮助!

php preg-replace
3个回答
3
投票

single quoted PHP string literals中,变量不会扩展。此外,由于$被转义,它被匹配为文字字符。 \$name匹配$name子串,而不是Adam。此外,在/之前的|破坏了过早结束它的整个模式。

也许,你想用

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

PHP demo。要在Eve之前摆脱空间,请在\s*之前添加$name,以匹配0+空白字符。

另一种选择:

preg_replace("/\s*\($name\)/",'','This is (Adam) Eve!')

another PHP demo

这里,

  • \s* - 匹配0+空格字符
  • qazxsw poi - 一张qazxsw poi图表
  • \( - (变量中的文本
  • qazxsw poi - 一个字面的qazxsw poi图表。

2
投票

使用strtr函数而不是正则表达式

$name

1
投票

首先,您可能想了解$name

然后你的正则表达式格式错误,也不是你想要的。

\)

你的正则表达式在管道之前和结束括号之后的斜杠)有语法错误。它是未转义的,也是你的正则表达的逃脱角色。 (这意味着它也出现在你的正则表达式的开头和结尾。)你需要先删除它。

你会得到一个看起来像这个$name = 'Adam'; $line = 'This is (Adam) Eve!'; $line = strtr($line, array('(' => '',$name=>'', ')' => '')); 的正则表达式。使用它,您的函数调用具有以下逻辑:

  1. 卸下所有开口支架
  2. 或删除所有关闭括号
  3. 或删除字符串double and single enquoted strings in PHP

这显然不是你想要的。您想要删除qazxsw poi变量中出现的所有单词,这些单词用括号括起来。

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

/\(|\)/|\$name/

如果要使括号可选,请​​使用问号运算符指示它们不是必需的:

)/|
© www.soinside.com 2019 - 2024. All rights reserved.