プロが教えるわが家の防犯対策術!

ユーザにHTMLの知識がなく、オリジナルのタグを入力させることによって
HTMLタグに置換をするということをPHPで実現したく思っています。

<@hoge@@こちら@> とtextareaに入力したものを
<a href="hoge.html">こちら</a> という形にしたいのです。

ereg("<@([^@@]*)@@([^@>]*)@>",$string,$regs);で「hoge」と「こちら」を
取得することはできますが、オリジナルタグが1行に複数ある
(例:<@hoge1@@こちら1@>、<@hoge2@@こちら2@>)場合、ereg関数で
取得しようとしても最初の「hoge1」と「こちら1」しか取得できません。

これを <a href="hoge1.html>こちら1</a>、<a href="hoge2.html">こちら2</a> と置換するにはどのようにしたらよろしいでしょうか?

使っている関数が間違っているのか、関数の使い方を間違っているのか
わかりません。
どなたかお分かりになる方いましたらヒントだけでも結構ですので
教えていただけませんでしょうか。

環境はphp4.1.0です。mbregexはインストールしています。

お手数ですが、よろしくお願いいたします。

A 回答 (1件)

正規表現の特徴であるGreedyMatch(貪欲なマッチ)のためです。


確かperlではlazyMatch(ものぐさなマッチ)と呼ばれる最短マッチ用のOperatorがあった筈なのでpreg系関数でものぐさマッチ用に構文を書けばヒットすると思います。

詳細はこのあたりを参照してください
http://www.ultraman.gr.jp/~momiyama/Learning_Per …

まじめにこの手の作業をしようとすると構文解析する必要があるでしょう。
phpの中で構文解析するのもどうかと思いますが・・・
本格的にやるんだったらjavaやCでコンパイラコンパイラやyacc、lexなどで検索すればヒントになる事柄が見つかると思います。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

>確かperlではlazyMatch(ものぐさなマッチ)と呼ばれる最短マッチ用のOperatorがあった筈なのでpreg系関数でものぐさマッチ用に構文を書けばヒットすると思います。

早速試してみます。

>まじめにこの手の作業をしようとすると構文解析する必要があるでしょう。

わかりました。もう少し勉強する必要がありそうです。。。頑張ってみます。

ありがとうございました。

お礼日時:2002/01/15 08:57

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