ヒントは文字コードです。
var_dump(preg_match('/[\xe2\x80\x98]/', "\xe3\x81\x98")); // 1
var_dump(preg_match('/\xe2\x80\x98/', "\xe3\x81\x98")); // 0
Like!
正規表現の初心者です。一部の仮名、漢字がこの記号‘
(アポストロフィ?)にマッチしてしまう原因は何ですか???
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
ヒントは文字コードです。
var_dump(preg_match('/[\xe2\x80\x98]/', "\xe3\x81\x98")); // 1
var_dump(preg_match('/\xe2\x80\x98/', "\xe3\x81\x98")); // 0
@kokika
Questionerこの謎記号、ASCIIコードに変換サイトで変換してみた所、2018と出ました。
http://web-apps.nbookmark.com/ascii-converter/
つまりマルチバイト文字です。
パターン修飾子のuを使わないと、マルチバイト文字は扱えませんので、その影響で不可解な結果が起きているのだと思います。
この記事で言及されているように、日本語や今回の謎記号を少しでも扱う場合は、パターン修飾子uを使った方が間違いないかと。
私も正規表現慣れてるわけではないので、間違い等あったらすみません
追記:検索する側が日本語なのでそもそもパターン修飾子必要ですね。
@kokika
Questioner