Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式无法处理数据库中的字符串_Php_Regex - Fatal编程技术网

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

PHP正则表达式无法处理数据库中的字符串,php,regex,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
在从数据库获取的字符串上使用时,不会返回所需的结果

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

我在这里遗漏了什么?

原来字符串中有Unicode破折号。要匹配所有Unicode破折号,请使用

/[\p{Pd}\xAD]/u

\p{Pd}
与中的任何连字符匹配,但不匹配软连字符
\xAD
,因此它应该与字符类中的
\p{Pd}
组合


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

如果使用
'/\p{Pd}/'
模式,是否匹配连字符/破折号?不,仍然打印相同的字符串,那么字符串中可能没有
-
。不确定是否有帮助,请尝试添加
/u
修饰符,
/\p{Pd}/u
。能否显示确切的输出?看起来像破折号的东西实际上可能是负号或其他破折号(可能是不同的字符)。