我发现了关于这个话题的几个问题,但没有解决我的目标的方法:
$name = 'Adam';
$line = 'This is (Adam) Eve!';
$newline = preg_replace('/\(|\)/|\$name/','',$line);
我的输出应该是This is Eve
... 你有什么想法,我的代码出了什么问题吗?感谢你的帮助!
我发现了关于这个话题的几个问题,但没有解决我的目标的方法:
$name = 'Adam';
$line = 'This is (Adam) Eve!';
$newline = preg_replace('/\(|\)/|\$name/','',$line);
我的输出应该是This is Eve
... 你有什么想法,我的代码出了什么问题吗?感谢你的帮助!
$
被转义了,它将作为一个字面字符进行匹配。 \$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!')
请查看另一个PHP演示。
在这里,
\s*
- 匹配0个或多个空格字符\(
- 一个(
字符$name
- $name
变量内的文本\)
- 一个文字)
字符。$name = 'Adam';
$line = 'This is (Adam) Eve!';
$line = strtr($line, array('(' => '',$name=>'', ')' => ''));
/\(|\)/|\$name/
你的正则表达式有一个语法错误,即在管道符号之前和括号关闭后使用斜杠 ) / |
。它没有转义,也是正则表达式的转义字符。 (这意味着它还出现在您的正则表达式的开头和结尾。)您需要先删除它。
您将获得一个看起来像这样的正则表达式:/\(|\)|\$name/
。 使用它,您的函数调用具有以下逻辑:
$name
这显然不是您想要的结果。 您想要删除由括号包围的变量$name
中的所有出现。
可以通过以下函数调用实现:
$newline = preg_replace("/\($name\)/", '', $line);
$newline = preg_replace("/\(?$name\)?/", '', $line);
\(Adam\)\s
.. - Sougata Bose