私は正規表現が得意ではありませんが、誰かが私にもっとよく説明してくれることを願って、デバッグしたコードでこれを見つけました。なぜ私はいつもこのシナリオで間違っていたのだろうか.
\p{L}
カテゴリ「文字」の単一のコードポイントに一致することはわかっています。0-9
数値です。
$regExp = /^\s*
(?P([0-2]?[1-9]|[12]0|3[01]))\s+
(?P\p{L}+?)\s+
(?P[12]\d{3})\s*$/i;
$value = '12 Février 2015' ;
$matches = array();
$match = preg_match($regExp, $value, $matches);
追加情報、私はこれを思いつきました:
$match = preg_match("/^\s*(?P<monthDay>([0-2]?[1-9]|[12]0|3[01]))\s+(?P<monthNameFull>\p{L}+?)\s+(?P<yearFull>[12]\d{3})\s*$/i", "18 Février 2015");
var_dump($match); //It will print int(0).
しかし、値が の場合、18 February 2015
int(1) が出力されます。どうしてこんなことに?\p{L}
Unicode 文字を受け入れるため、両方の値で 1 を返すと想定されています。