Php preg_用字符串替换$variable

Php preg_用字符串替换$variable,php,preg-replace,Php,Preg Replace,我在这个话题上发现了几个问题,但没有解决方案: $name = 'Adam'; $line = 'This is (Adam) Eve!'; $newline = preg_replace('/\(|\)/|\$name/','',$line); 我的输出应该是这是Eve。。。知道我的代码有什么问题吗?谢谢你的帮助 使用strtr函数而不是正则表达式 $name = 'Adam'; $line = 'This is (Adam) Eve!'; $line = strtr($line, arra

我在这个话题上发现了几个问题,但没有解决方案:

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

我的输出应该是
这是Eve
。。。知道我的代码有什么问题吗?谢谢你的帮助

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

$name = 'Adam';
$line = 'This is (Adam) Eve!';
$line = strtr($line, array('(' => '',$name=>'', ')' => ''));
在中,变量不展开。此外,由于
$
是转义的,因此它作为文本字符进行匹配
\$name
匹配
$name
子字符串,而不是
Adam
。此外,
/
之前的
|
会破坏整个模式,使其过早结束

也许,你想使用

$name = 'Adam';
$line = 'This is (Adam) Eve!';
$newline = preg_replace("/\(|\)|$name/",'',$line);
echo $newline;
看。要除去
Eve
之前的空格,请在模式中的
$name
之前添加
\s*
,以匹配0+空格字符

另一种选择:

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

这里,

  • \s*
    -匹配0+空格字符
  • \(
    -a
    字符
  • $name
    -变量
    $name
    中的文本
  • \)
    -文字
    字符

    • 首先,您可能想了解

      那么您的正则表达式格式错误,也不是您想要的

      /\(|\)/|\$name/
      
      您的正则表达式在管道前面和右括号后面有一个斜杠(
      )/|
      )语法错误。它是未转义的,也是正则表达式的转义字符。(这意味着它也出现在正则表达式的开始和结束处。)您需要先删除它

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

    • 拆下所有开口支架
    • 或拆除所有封闭支架
    • 或者删除字符串
      $name
    • 这显然不是你想要的。您希望删除
      $name
      变量中出现的所有单词,这些单词用括号括起来

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

      $newline = preg_replace("/\($name\)/", '', $line);
      
      如果要使括号成为可选的,请使用问号运算符表示它们不是强制性的:

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

      请使用正确的SE术语。“我在这个问题上发现了几个问题”,例如。试试-
      \(Adam\)\s
      。看看这个,也许它可以帮助你