PHP字符串替换匹配整个单词

Posted

技术标签:

【中文标题】PHP字符串替换匹配整个单词【英文标题】:PHP string replace match whole word 【发布时间】:2011-03-26 11:19:19 【问题描述】:

我想用 php 替换完整的单词

示例: 如果我有

$text = "Hello hellol hello, Helloz";

我用

$newtext = str_replace("Hello",'NEW',$text);

新文本应该是这样的

新的你好,你好,你好

PHP 返回

新你好1你好,新z

谢谢。

【问题讨论】:

【参考方案1】:

您想使用正则表达式。 \b 匹配单词边界。

$text = preg_replace('/\bHello\b/', 'NEW', $text);

如果 $text 包含 UTF-8 文本,则必须添加 Unicode 修饰符“u”,以便非拉丁字符不会被误解为单词边界:

$text = preg_replace('/\bHello\b/u', 'NEW', $text);

【讨论】:

这符合婆婆妈妈? 上述情况的修复可能在这里:***.com/a/39685053/129202【参考方案2】:

字符串中的多个单词被this替换

    $String = 'Team Members are committed to delivering quality service for all buyers and sellers.';
    echo $String;
    echo "<br>";
    $String = preg_replace(array('/\bTeam\b/','/\bfor\b/','/\ball\b/'),array('Our','to','both'),$String);
    echo $String;
    Result: Our Members are committed to delivering quality service to both buyers and sellers.

【讨论】:

【参考方案3】:

数组替换列表:如果你的替换字符串互相替换,你需要preg_replace_callback

$pairs = ["one"=>"two", "two"=>"three", "three"=>"one"];

$r = preg_replace_callback(
    "/\w+/",                           # only match whole words
    function($m) use ($pairs) 
        if (isset($pairs[$m[0]]))      # optional: strtolower
            return $pairs[$m[0]];      
        
        else 
            return $m[0];              # keep unreplaced
        
    ,
    $source
);

显然 / 为了提高效率,/\w+/ 可以替换为密钥列表 /\b(one|two|three)\b/i

【讨论】:

你有语法错误,用preg_replace的括号替换最后的大括号 另外,if (isset($pairs[$m[0]]) 没有括号。 谢谢。我正在寻找这个。【参考方案4】:

您还可以使用 T-Regx 库,在替换时引用 $\ 字符

<?php
$text = pattern('\bHello\b')->replace($text)->all()->with('NEW');

【讨论】:

以上是关于PHP字符串替换匹配整个单词的主要内容,如果未能解决你的问题,请参考以下文章

如何确保 replaceAll 将替换整个单词而不是子字符串

将整个单词与字符串中的前导或尾随特殊符号(如美元)匹配

用一组单词数组中的随机单词替换字符串中的整个单词

sed全字搜索和替换

正则表达式用特定格式 C# 替换整个单词

我们如何在匹配两个文本文件时查找和替换单词?