preg_replace $变量与字符串
preg_replace $variable with string
我发现了几个关于这个主题的问题,但没有适合我的解决方案:
$name = 'Adam';
$line = 'This is (Adam) Eve!';
$newline = preg_replace('/\(|\)/|$name/','',$line);
我的输出应该是This is Eve
...知道我的代码有什么问题吗?感谢您的帮助!
使用strtr函数代替正则表达式
$name = 'Adam';
$line = 'This is (Adam) Eve!';
$line = strtr($line, array('(' => '',$name=>'', ')' => ''));
在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
之前的 space,请在模式中的 $name
之前添加 \s*
以匹配 0+ 白色 space 个字符。
另一种选择:
preg_replace("/\s*\($name\)/",'','This is (Adam) Eve!')
参见 another PHP demo。
这里,
\s*
- 匹配 0+ 个白色space 个字符
\(
- 一个 (
字符
$name
- $name
变量中的文本
\)
- 文字 )
字符。
首先,您可能想了解 double and single enquoted strings in PHP。
那么你的正则表达式格式错误,也不是你想要的。
/\(|\)/|$name/
您的正则表达式在管道之前和右括号之后的斜线 )/|
存在语法错误。它是未转义的,也是您的正则表达式的转义字符。 (这意味着它也出现在正则表达式的开头和结尾。)您需要先将其删除。
你会得到一个看起来像这样的正则表达式 /\(|\)|$name/
。有了它,您的函数调用具有以下逻辑:
- 删除所有左括号
- 或删除所有右括号
- 或删除字符串
$name
那显然不是你想要的。您想要删除 $name
变量中出现的所有用方括号括起来的单词。
这可以通过以下函数调用来实现:
$newline = preg_replace("/\($name\)/", '', $line);
如果要使括号可选,请使用问号运算符表示它们不是必需的:
$newline = preg_replace("/\(?$name\)?/", '', $line);
我发现了几个关于这个主题的问题,但没有适合我的解决方案:
$name = 'Adam';
$line = 'This is (Adam) Eve!';
$newline = preg_replace('/\(|\)/|$name/','',$line);
我的输出应该是This is Eve
...知道我的代码有什么问题吗?感谢您的帮助!
使用strtr函数代替正则表达式
$name = 'Adam';
$line = 'This is (Adam) Eve!';
$line = strtr($line, array('(' => '',$name=>'', ')' => ''));
在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
之前的 space,请在模式中的 $name
之前添加 \s*
以匹配 0+ 白色 space 个字符。
另一种选择:
preg_replace("/\s*\($name\)/",'','This is (Adam) Eve!')
参见 another PHP demo。
这里,
\s*
- 匹配 0+ 个白色space 个字符\(
- 一个(
字符$name
-$name
变量中的文本\)
- 文字)
字符。
首先,您可能想了解 double and single enquoted strings in PHP。
那么你的正则表达式格式错误,也不是你想要的。
/\(|\)/|$name/
您的正则表达式在管道之前和右括号之后的斜线 )/|
存在语法错误。它是未转义的,也是您的正则表达式的转义字符。 (这意味着它也出现在正则表达式的开头和结尾。)您需要先将其删除。
你会得到一个看起来像这样的正则表达式 /\(|\)|$name/
。有了它,您的函数调用具有以下逻辑:
- 删除所有左括号
- 或删除所有右括号
- 或删除字符串
$name
那显然不是你想要的。您想要删除 $name
变量中出现的所有用方括号括起来的单词。
这可以通过以下函数调用来实现:
$newline = preg_replace("/\($name\)/", '', $line);
如果要使括号可选,请使用问号运算符表示它们不是必需的:
$newline = preg_replace("/\(?$name\)?/", '', $line);