preg_replace
不会返回所需的结果。
$result = DB::connection("connection")->select("my query");
foreach($result as $row){
//prints run-d.m.c.
print($row->artist . "\n");
//should print run.d.m.c
//prints run-d.m.c
print(preg_replace("/-/", ".", $row->artist) . "\n");
}
仅当我尝试替换-
(短划线)时才会发生这种情况。我可以替换任何其他角色。
但是,如果我在简单字符串上尝试使用此正则表达式,它将按预期工作:
$str = "run-d.m.c";
//prints run.d.m.c
print(preg_replace("/-/", ".", $str) . "\n");
我在这里缺少什么?
答案 0 :(得分:1)
事实证明你的字符串中有Unicode破折号。要匹配所有Unicode破折号,请使用
/\p{Pd}/u
请参阅regex demo
\p{Pd}
匹配Unicode Character Category 'Punctuation, Dash'中的任何连字符。
/u
修饰符使模式识别Unicode,并使正则表达式引擎将输入字符串视为Unicode代码点序列,而不是字节序列。