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字符串替换匹配整个单词的主要内容,如果未能解决你的问题,请参考以下文章