[英]PHP regular expression not working with string from database
當我在從數據庫獲取的字符串上使用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}
匹配Unicode 字符類別“標點符號,破折號”中的任何連字符,但軟連字符\\xAD
,因此它應該與字符類中的\\p{Pd}
組合。
/u
修飾符使模式識別 Unicode,並使正則表達式引擎將輸入字符串視為 Unicode 代碼點序列,而不是字節序列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.