kokika
@kokika

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

謎記号の正規表現について

解決したいこと

正規表現の初心者です。一部の仮名、漢字がこの記号(アポストロフィ?)にマッチしてしまう原因は何ですか???

var_dump(preg_match('/[‘]/', 'じ')); // 1
var_dump(preg_match('/[‘]/', 'し')); // 0
var_dump(preg_match('/[‘]/', '一')); // 1
var_dump(preg_match('/[‘]/', '二')); // 0

これも謎です。。。

var_dump(preg_match('/[‘]/', 'じ')); // 1
var_dump(preg_match('/‘/', 'じ'));   // 0
0

2Answer

ヒントは文字コードです。

var_dump(preg_match('/[\xe2\x80\x98]/', "\xe3\x81\x98")); // 1
var_dump(preg_match('/\xe2\x80\x98/', "\xe3\x81\x98")); // 0
2Like

Comments

  1. @kokika

    Questioner

    理解しました。ありがとうございます!

この謎記号、ASCIIコードに変換サイトで変換してみた所、2018と出ました。
http://web-apps.nbookmark.com/ascii-converter/

つまりマルチバイト文字です。

パターン修飾子のuを使わないと、マルチバイト文字は扱えませんので、その影響で不可解な結果が起きているのだと思います。

この記事で言及されているように、日本語や今回の謎記号を少しでも扱う場合は、パターン修飾子uを使った方が間違いないかと。

私も正規表現慣れてるわけではないので、間違い等あったらすみません

追記:検索する側が日本語なのでそもそもパターン修飾子必要ですね。

1Like

Comments

  1. @kokika

    Questioner

    勉強になりました。ありがとうございます!

Your answer might help someone💌