2016-10-17 7 views
1

preg_replaceデータベースから取得した文字列で使用すると、結果が返されません。データベースからの文字列でPHP正規表現が機能しない

$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

'/ \ p {Pd}/''パターンを使用する場合、ハイフン/ダッシュと一致しますか? –

+0

いいえ、まだ同じ文字列を表示します – Palo

+0

次に、文字列に '-'がないことがあります。もしそれが役に立つのであれば、 '/ u'修飾子'/\ p {Pd}/u'を追加してみてください。 –

答えて

1

文字列にUnicodeのダッシュがあることが判明しました。すべてのUnicodeダッシュを一致させるには、

/\p{Pd}/u 

を使用regex demo

\p{Pd}試合Unicode Character Category 'Punctuation, Dash'内の任意ハイフンを参照してください。

/u修飾子はパターンをUnicode対応にし、正規表現エンジンで入力文字列をバイトシーケンスではなくUnicodeコードポイントシーケンスとして扱わせます。

関連する問題