Php preg_replace:如何获得被替换的内容

Php preg_replace:如何获得被替换的内容,php,regex,string,replace,Php,Regex,String,Replace,我想显示来自正则表达式代码的卡片: 啊,就像心一样,, kc展示俱乐部之王 我使用preg_replace()这样做: $arr = array('ah', 'kh', 'qh', ..., '3c', '2c'); $regex = ''; foreach ($arr as $i => $card) { $regex .= $card; if ($i < count($arr) - 1) $regex .= '|'; } $message = p

我想显示来自正则表达式代码的卡片: 啊,就像心一样,, kc展示俱乐部之王

我使用preg_replace()这样做:

$arr = array('ah', 'kh', 'qh', ..., '3c', '2c');
$regex = '';
foreach ($arr as $i => $card)
{
    $regex .= $card;
    if ($i < count($arr) - 1)
        $regex .= '|';
}

$message = preg_replace('#('.$regex.')#', '<img src="'.$dontknow.'.png" class="card" alt="" />', $message);
$arr=array('ah','kh','qh','3c','2c');
$regex='';
foreach($arr as$i=>$card)
{
$regex.=$card;
如果($i<计数($arr)-1)
$regex.=“|”;
}
$message=preg#u replace(“#”(“$regex”)#,“$message”);
我不知道src属性中放了什么值,我想告诉preg_replace()“当你找到'ah'时,你放ah.png,如果是kc,那么$dontknow=='kc'等等


有人可以给我一些帮助吗?

使用$1引用-这是指向PHP通过preg\u replace匹配的第一组的链接使用$1引用-这是指向PHP通过preg\u replace匹配的第一组的链接您可以这样做:

$message = preg_replace('#('.$regex.')#', 
                          '<img src="$1.png" class="card" alt="" />', $message);
$message=preg_replace(“#”(“.$regex”)#”,
“,”消息;
您可以执行以下操作:

$message = preg_replace('#('.$regex.')#', 
                          '<img src="$1.png" class="card" alt="" />', $message);
$message=preg_replace(“#”(“.$regex”)#”,
“$信息);

循环不需要
这个
。这里有一个稍微改进的版本,使用了正确的正则表达式

$arr = array('ah', 'kh', 'qh', ..., '3c', '2c');

$message = preg_replace('/('. implode('|'. $regex) .')/is', '<img src="$1.png" class="card" alt="" />', $message);
$arr=array('ah','kh','qh','3c','2c');
$message=preg_replace('/('.intlode('.$regex.'))/is',''.$message);

循环不需要
这个
。这里有一个稍微改进的版本,使用了正确的正则表达式

$arr = array('ah', 'kh', 'qh', ..., '3c', '2c');

$message = preg_replace('/('. implode('|'. $regex) .')/is', '<img src="$1.png" class="card" alt="" />', $message);
$arr=array('ah','kh','qh','3c','2c');
$message=preg_replace('/('.intlode('.$regex.'))/is',''.$message);

您只需要在替换中使用
$n
来引用某个匹配的组(
n
是一个数字)

自从我们拔出大炮后:

  • 让我们使用转义数组中的正则表达式保留字符

  • PHP有一套很好的函数来处理数组,让我们用它来代替那个丑陋的循环

  • ,我意识到您需要添加单词边界
    \b
    以防止错误匹配,例如
    yeah
    被替换为
    ye',$message);
    回声$信息;
    

    您只需要在替换中使用
    $n
    来引用某个匹配的组(
    n
    是一个数字)

    自从我们拔出大炮后:

    • 让我们使用转义数组中的正则表达式保留字符

    • PHP有一套很好的函数来处理数组,让我们用它来代替那个丑陋的循环

    • ,我意识到您需要添加单词边界
      \b
      以防止错误匹配,例如
      yeah
      被替换为
      ye',$message);
      回声$信息;
      

      您应该通过在纸牌上添加特殊字符(如下例中的
      @
      )来改进指示纸牌的“标记”。这将防止您无意中更改其他文字段落:

      $message = 'foo qh bar';
      $arr = array('ah', 'kh', 'qh', '3c', '2c');
      
      $escaped_arr = array_map(function($v){
          return preg_quote($v, '#');
      }, $arr); // Anonymous function requires PHP 5.3+
      
      $message = preg_replace('#\b('.implode('|', $escaped_arr).')\b#', '<img src="$1.png" class="card" alt="" />', $message);
      
      echo $message;
      
      $arr=array('ah','kh','qh','ac','3c','2c');
      $txt='这是一行有@ah和@qh的卡片,但可能会头痛。';
      $rx='#@('.join('|',$arr)。')#;
      echo preg_替换($rx,“,$txt);
      
      您应该通过添加特殊字符(如下例中的
      @
      )来改进指示扑克牌的“标记”。这将防止您无意中更改其他文本段落:

      $message = 'foo qh bar';
      $arr = array('ah', 'kh', 'qh', '3c', '2c');
      
      $escaped_arr = array_map(function($v){
          return preg_quote($v, '#');
      }, $arr); // Anonymous function requires PHP 5.3+
      
      $message = preg_replace('#\b('.implode('|', $escaped_arr).')\b#', '<img src="$1.png" class="card" alt="" />', $message);
      
      echo $message;
      
      $arr=array('ah','kh','qh','ac','3c','2c');
      $txt='这是一行有@ah和@qh的卡片,但可能会头痛。';
      $rx='#@('.join('|',$arr)。')#;
      echo preg_替换($rx,“,$txt);
      
      这似乎是一个过火的解决方案。
      $message
      的值是否如此复杂,以至于需要正则表达式才能获取卡代码?您可以构造
      $regex='#'。join('|',$arr)“#”
      并避免使用
      foreach
      循环。--但我刚刚注意到,您的REGEXP可能会更改消息中出现的各种情况:像“ah”这样的字符串不是很具体,可能会出现在您不希望显示扑克牌的地方。谢谢,是的,我知道,这正是我在寻找的。这似乎是一个过火的解决方案离子。
      $message
      的值是否如此复杂,以至于需要正则表达式才能获取卡代码?您可以构造
      $regex='#'。join('|',$arr)“#”
      并避免使用
      foreach
      循环。--但我刚刚注意到,您的REGEXP可能会更改消息中出现的各种情况:像“ah”这样的字符串不是很具体,可能会出现在您不希望显示扑克牌的地方。谢谢,是的,我知道,这正是我要查找的。很好,谢谢。我们可以指定w我们必须像字符串一样使用它:
      '
      而不是像
      '
      完美,谢谢。我们可以指定我们必须像字符串一样使用它:
      '
      而不是像
      '
      我不明白,这是我的解决方案,$regex对你来说是什么?如果是数组,它不起作用,你可以对你的图像源使用
      $1.png
      好的,对不起,我会的我看不到你的消息我不明白,这是我的解决方案,$regex对你来说是什么?如果是数组,它不起作用你可以使用
      $1.png
      作为你的图像源好的,对不起,我没有看到你的消息这是个好主意,但我在寻找速度,消息不是文本,我想你明白了问:这是个好主意,但我在寻找速度,mes圣人不是文字,我想你明白了问: