$text ='2007. p.149–170.';
こんなテキストがあって、ここから "149"と"170"をぬきだしたくて下記の正規表現をかいたんですが、これが全くマッチしない。
$text ='2007. p.149–170.';
if (preg_match('/(\d+)-(\d+)\./', $text, $match)) {
var_dump($match);
}
で、ふと思いだしたのがハイフンって見た目同じでも違う文字コードの文字がいっぱいあったなってこと。(イヤですよねえ)
でググってみたらすぐわかったんですが、"149–170"の間にあるハイフンのような文字は ”en-dash” という文字のようです。
http://www.keyton-co.jp/blog/article/2017-2-14-unicode によるとMacではOption+"-"で入力できるようです。
どうやらen-dashは "149–170" のように範囲を表すときに使うみたいです。
文字コードはU+2013のようなのでハイフンの他にこのen-dashにもマッチするように正規表現を変更。
UTF-8として処理されるように u修飾子もつけて次のようになりました。
$text ='2007. p.149–170.';
if (preg_match('/(\d+)[-\x{2013}](\d+)\./u', $text, $match)) {
var_dump($match);
}
なかなか気が付かないよなぁ。こいうの^^;