簡體   English   中英

PHP正則表達式不適用於數據庫中的字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM