[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にすると正規表現が簡単にできますね。