PHP正则表达式无法使用数据库中的字符串

时间:2016-10-17 08:08:28

标签: php regex

当我在从数据库中获取的字符串上使用它时,

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");

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

事实证明你的字符串中有Unicode破折号。要匹配所有Unicode破折号,请使用

/\p{Pd}/u

请参阅regex demo

\p{Pd}匹配Unicode Character Category 'Punctuation, Dash'中的任何连字符。

/u修饰符使模式识别Unicode,并使正则表达式引擎将输入字符串视为Unicode代码点序列,而不是字节序列。