繁体   English   中英

preg_replace $ variable with string

[英]preg_replace $variable with string

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

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

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

单引号的PHP字符串文字中 ,不扩展变量。 此外,由于$被转义,因此它被匹配为文字字符。 \\$name匹配$name substring,而不是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+空白字符
  • \\( - a ( char
  • $name - $name变量中的文本
  • \\) - 文字) char。

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

$name = 'Adam';
$line = 'This is (Adam) Eve!';
$line = strtr($line, array('(' => '',$name=>'', ')' => ''));

首先,您可能想要了解PHP中的双重和单个引用字符串

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

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

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

您将获得一个类似于/\\(|\\)|\\$name/的正则表达式。 使用它,您的函数调用具有以下逻辑:

  1. 卸下所有开口支架
  2. 或删除所有关闭括号
  3. 或删除字符串$name

这显然不是你想要的。 您希望删除$name变量中包含括号的所有单词出现。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM