如何仅当美元符号围绕一个单词时才从PHP变量中删除美元符号($)

如何仅当美元符号围绕一个单词时才从PHP变量中删除美元符号($),php,Php,我想从PHP变量中删除任何美元符号$,只要它包含一个单词 我知道如何将每个$替换为空空间,使其看起来像是被删除的,例如: <?php $string = 'Hello $George$'; $string = str_replace('$', '', $string); echo $string; // Prints: Hello George ?> <?php $string = 'Hello $Geor

我想从PHP变量中删除任何美元符号$,只要它包含一个单词

我知道如何将每个$替换为空空间,使其看起来像是被删除的,例如:

  <?php 

      $string = 'Hello $George$';
      $string = str_replace('$', '', $string);
      echo $string; // Prints: Hello George


   ?>
<?php 

      $string = 'Hello $George$, are you $ok?';
      $string = str_replace('$', '', $string);
      echo $string; // Prints Hello George, are you ok?

   ?>
但上面的代码也删除了不围绕单词的$,例如:

  <?php 

      $string = 'Hello $George$';
      $string = str_replace('$', '', $string);
      echo $string; // Prints: Hello George


   ?>
<?php 

      $string = 'Hello $George$, are you $ok?';
      $string = str_replace('$', '', $string);
      echo $string; // Prints Hello George, are you ok?

   ?>
我已经试了好几个小时来解决这个问题,但没能解决,非常感谢您的帮助。

首先,我会回答您的问题

取而代之的是使用一种模式,该模式只检测单词周围的那些美元符号

$string = preg_replace('/\$(\w+)\$/', '$1', $string);
现在是代码的改进

正如您在问题的评论中提到的,您需要用单引号将字符串括起来,以防止PHP用相应的变量替换前缀为美元符号的单词

可以找到一个很好的来源来理解双引号和单引号字符串之间的差异。

首先,我将回答您的问题

取而代之的是使用一种模式,该模式只检测单词周围的那些美元符号

$string = preg_replace('/\$(\w+)\$/', '$1', $string);
现在是代码的改进

正如您在问题的评论中提到的,您需要用单引号将字符串括起来,以防止PHP用相应的变量替换前缀为美元符号的单词


可以找到一个很好的源代码来理解双引号和单引号字符串之间的差异。

我不确定它将如何替换$string=Hello$George$中$ok的$from$ok,您是$ok吗。。。因为当它将$ok赋值给$string时,它实际上已经用该变量的值替换了$ok。简单的注释答案可能会跟在其他人后面,但很简单。使用正则表达式匹配开头和结尾的$symbols。另一个建议是,在设置字符串时,使用单引号“防止php将$string解析为变量,除非您打算写入:$string=”Hello$George$,您是$ok吗?';请注意单引号。。。但是,您最终必须求值该字符串以获得要替换的$ok。我不确定它将如何替换$string=Hello$George$中的$ok中的$ok,您是$ok吗。。。因为当它将$ok赋值给$string时,它实际上已经用该变量的值替换了$ok。简单的注释答案可能会跟在其他人后面,但很简单。使用正则表达式匹配开头和结尾的$symbols。另一个建议是,在设置字符串时,使用单引号“防止php将$string解析为变量,除非您打算写入:$string=”Hello$George$,您是$ok吗?';请注意单引号。。。但是你最终不得不求值这个字符串,以得到$ok来替换。