Php Preg#U仅在其';这是唯一的字眼
当字符串只存在于一个单词之外时,我如何替换它 例如: 以下是:Php Preg#U仅在其';这是唯一的字眼,php,preg-replace,str-replace,Php,Preg Replace,Str Replace,当字符串只存在于一个单词之外时,我如何替换它 例如: 以下是: G-star原材料 G-STAR G-star 我想将它们全部改为G-STAR RAW: $x = preg_replace('/(G-star)\b/', 'G-STAR RAW', $x);` 但我也得到了: G-STAR RAW RAW 它还替换了示例nr 1中的G-Star。如果我说它只能在该字符串中工作,而不是在该字符串中有更多单词时工作,我该如何替换它?模糊匹配 也许一个包含levenshtein距离的算法更有用
$x = preg_replace('/(G-star)\b/', 'G-STAR RAW', $x);`
但我也得到了:
G-STAR RAW RAW
它还替换了示例nr 1中的G-Star。如果我说它只能在该字符串中工作,而不是在该字符串中有更多单词时工作,我该如何替换它?模糊匹配
也许一个包含levenshtein
距离的算法更有用
函数猜测($in){
$in=strtolower($in);
$known_brands=数组(
“G-STAR RAW”=>数组(“G-STAR RAW”、“G-STAR”),
“Brand-X”=>阵列(“brandx”),
“Brand-Y”=>数组(“brandy”),
);
$champion=false;
$最低分数=999;
foreach($key=>$value的知名品牌){
foreach(价值为$val){
$score=levenshtein($in$val);
如果($分数<$最低分数){
$最低分数=$分数;
$champion=$key;
}
}
}
返回$champion;
}
var_dump(猜测(“gstar”);
var_dump(猜测(“G-STAR”);
var_dump(猜测(“Jacky”));
var_dump(猜测(“布兰登”);
字符串(10)“G-STAR原始”
字符串(10)“G-STAR原始”
串(7)“品牌-Y”
串(7)“品牌-X”
尝试添加一个可选匹配项,在文本中查找现有的原始
:
(G-star(?: raw)?)\b
在preg\u replace()
中,它看起来像:
$x = preg_replace('/\b(G-star(?: raw)?)\b/i', 'G-STAR RAW', $x);
还要注意在正则表达式中添加的i
选项以忽略大小写敏感度
输出:
更新添加了一个前导的
\b
,以防止“g-star”出现在“big-star”等其他单词中。如果您只需要替换上述字符串,则可以使用以下命令:
$txt = preg_replace('~\bg-star(?: raw)?\b~i', 'G-STAR RAW', $txt);
$x = preg_replace('/(G\-[starSTAR]+(\s*[rawRAW]+)?)/', 'G-STAR RAW', $x);
$x = preg_replace('/([A-Z]\-[A-Za-z]+(\s*[a-zA-Z]+)?)/', 'G-STAR RAW', $x);
如果您的字符串与您提供给我们的字符串相似,则可以使用以下字符串:
$x = preg_replace('/(G\-[starSTAR]+(\s*[rawRAW]+)?)/', 'G-STAR RAW', $x);
$x = preg_replace('/([A-Z]\-[A-Za-z]+(\s*[a-zA-Z]+)?)/', 'G-STAR RAW', $x);
最后一个表达式将匹配以大写字母开头的任何字符串,后跟破折号(-),后跟小写和大写字符的任意组合,可能后跟一个或多个字符,最后是大写和小写字符的任意组合。@FritsvanCampen Good catch;我已经更新了我的答案(和代码板示例),使之成为领先的
\b
。谢谢=]我现在正在尝试它(需要为它做一个大的提要导入。当我有结果时会让你知道是的,确实有效。非常感谢。你介意向我解释一下吗?我理解单词边界,但是(?:word)到底做什么呢?:代表什么?@inTOWN(?:
是一个不匹配的组;在这种情况下,它不是真正必要的(您可以简单地使用(
);但是,为了防止您使用preg_match()
。?
结尾表示“可选”;它可能出现0或1次(也可以使用{0,1}编写)
取而代之)。非常感谢!@newfurniture