[英]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/
的正则表达式。 使用它,您的函数调用具有以下逻辑:
$name
这显然不是你想要的。 您希望删除$name
变量中包含括号的所有单词出现。
这可以通过以下函数调用来实现:
$newline = preg_replace("/\($name\)/", '', $line);
如果要使括号可选,请使用问号运算符指示它们不是必需的:
$newline = preg_replace("/\(?$name\)?/", '', $line);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.