dポイントプレゼントキャンペーン実施中!

PHP5で正規表現を使った文字の取り出しが上手くいきません。

こんばんは、教えて!goo初投稿させて頂きます。
PHP5で学内の事務情報を管理するスクリプトを組んでいます。

学籍番号から入学年度・学部・名簿番号を取り出したいのですが、狙った通りに上手く動いてくれません。
POSTで渡された テキスト内に含まれた7桁の学籍番号「0708068」(2:2:3桁区切りで入学年度・学部・名簿番号)をマッチングさせる為に、正規表現「\d{2}\d{2}\d{3}」で 配列 $regs に返し、
$regs[0] => 07
$regs[1] => 08
$regs[2] => 068
のような感じで戻ってくる事を想定しています。
手元の書籍、ネットのリファレンスで確認しても問題点が解りません。
何が間違っているのか、ご指摘お願いします。

//上手く動いてくれないコード
$text = "私の学籍番号は0708068番です。";
if(ereg("\d{2}\d{2}\d{3}",$text,$regs)){
echo "true.\n";
echo ($regs[0]."\n".$regs[1]."\n".$regs[2]."\n");
}else{
echo "false.\n";
//いつもfalseが帰ってきてしまう。
}

A 回答 (1件)

POSIX正規表現では\dは(数値のメタキャラとして)通用しないはずです([0-9]と表現します)。


また、2,2,3桁の形でマッチさせたいのであれば表現が不足している部分があります。
以上に加えて、PHP5.3.0 以降、regex拡張モジュールは非推奨となっているのでpreg_matchを用いた方が将来性があると思います。
ですので下記のようにするのがいいのではないでしょうか。

$text = "私の学籍番号は0708068番です。";
if(preg_match("/(\d{2})(\d{2})(\d{3})/", $text, $regs)){
echo "true.\n";
var_dump($regs);
}else{
echo "false.\n";
}

結果は以下のようになります。
true.
array(4) {
[0]=>
string(7) "0708068"
[1]=>
string(2) "07"
[2]=>
string(2) "08"
[3]=>
string(3) "068"
}
    • good
    • 0
この回答へのお礼

ここ数日、周りに質問できる人もおらず、なぜ動かないのか頭を抱えていましたが、
>regex拡張モジュールは非推奨
>POSIX正規表現では\dは通用しない
など、聞いた事によって色々と謎が解けました。どうも有り難う御座います。

お礼日時:2010/05/21 00:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!