[PHP-users 8656] Re: 正規表現関数について
Mashiki
php-users@php.gr.jp
Mon, 15 Jul 2002 10:07:36 +0900
Mashikiです。
>こんな感じでやってみました。
>こんどはeregにして全体を括弧でくくって
>
>if
>(ereg("(/[0-9A-Za-z\-]+[\-\.\w\/]*\@([0-9A-Za-z]+[\-\w]*\.){1,4}[0-9A-Za-z]+
>/)",$regs[2],$add)) {
>print($add[0]);
>}else{
>print("non");
>}
>としてみました。
>しかしnonと表示されます。
>マッチしていないのでしょうか?
>$addの中身は空っぽですね?
>
>スクリプトの見直しなど色々やってみたのですが・・・です
>最後で!?って感じです。
まだ先は遠そうです。大垣さんの方法を検討してみても
いいかもしれません。最初の方法で続けてみるなら、
1. $add[0]は 対象stringのコピーが保持されるので、今回は、
$add[1]にマッチした結果が入ります。
2. Perlでは正規表現を言語でサポートしているので、「/」で
囲えますが、phpでは正規表現を文字列として関数に渡すため、
「'」なり「"」で囲います。ariariさんの書き方では、両端の
「/」はマッチングパターンの一部になってしまうので外す。
3. 正規表現での「\w」の意味をわかって使っているでしょうか?
eregでは使用できないようなので同じ意味の別の表現にして
する。
4. phpでは「"」で囲われた文字列内で「\」を表現するには
かなり注意が必要です。自分の意図したとおりの正規表現が
eregに渡っているか、
echo "(/[0-9A-Za-z\-]+[\-\.\w\/]*\@([0-9A-Za-z]+[\-\w]*\.){1,4}[0-9A-
Za-z+>/)"
などとして確認してみる。(\は全部消えてしまっていると思います)
# eregをeregiにすると正規表現が簡単にできますね。