[PHP-users 27598] Re: 正規表現についてご教授の程、よろしくお願いします。

水沼寛喜 mizunuma @ m-design.com
2005年 11月 24日 (木) 15:00:17 JST


お世話になっております。水沼です。

さわい様、炭竃様、お返事を頂きありがとうございます。

さわい様

> 例文の
>  テスト<a href="http://www.yahoo.co.jp">yahoo</a>
> を変更して
>  テスト<a href="http://www.yahoo.co.jp">yahoo!</a>
> としたばあい、最初の条件の変換を行うと
> テスト<a href="http://www.yahoo.co.jp"><a
> href="http://hoge.hoge">yahoo</a>!</a>
>
> に なっちゃいますが、いいんでしょうか。

自分で作成した正規表現で試したところ、確かになってしまいました。
この場合ですと、正規表現のパターンマッチがおかしいのでどうしたらよろしいので
しょうか?



炭竃様

> <?
> $str='テスト1<a href="http://www.yahoo.co.jp">yahoo</a>
> yahooです。
> テスト2<a href="http://www.google.com">google</a>
> 今はgoogleだよ。';
>
> $str=mb_ereg_replace('(<a +[^<>]+?>(.+?)</a>)(.*?)\2','\1\3\1',$str);
>
> echo $str;
> ?>
>
>
> $keyword を使うのであれば mb_ereg_replace の所を以下の様に・・・
>
> $str=mb_ereg_replace('(<a
> +[^<>]+?>'.$keyword.'</a>)(.*?)'.$keyword,'\1\2\1',$str);

上記の正規表現を試したところ、yahooの部分もgoogleの部分も
期待通りな変換処理にはなりませんでした。

ご教授の程、よろしくお願い致します。


> -----Original Message-----
> From: php-users-bounces @ php.gr.jp
> [mailto:php-users-bounces @ php.gr.jp] On Behalf Of kei sumigama
> Sent: Thursday, November 24, 2005 12:27 PM
> To: PHP-users ML
> Subject: [PHP-users 27597] Re:正規表現についてご教授の程、よろしくお願いし
ます。
>
>
> 炭竃です。
>
> こういうケースの場合は後方参照が有効だと思います。
> 後方参照とは () で括った箇所にマッチした文字列を
> マッチした後に \数字 で参照(使用)できる機能です。
> これを使えるようになれば正規表現の幅が広がりますよ!!
>
> <?
> $str='テスト1<a href="http://www.yahoo.co.jp">yahoo</a>
> yahooです。
> テスト2<a href="http://www.google.com">google</a>
> 今はgoogleだよ。';
>
> $str=mb_ereg_replace('(<a +[^<>]+?>(.+?)</a>)(.*?)\2','\1\3\1',$str);
>
> echo $str;
> ?>
>
>
> $keyword を使うのであれば mb_ereg_replace の所を以下の様に・・・
>
> $str=mb_ereg_replace('(<a
> +[^<>]+?>'.$keyword.'</a>)(.*?)'.$keyword,'\1\2\1',$str);
>
>
>
> ----- Original Message -----
> From: "水沼寛喜" <mizunuma @ m-design.com>
> To: <php-users @ php.gr.jp>
> Sent: Thursday, November 24, 2005 10:34 AM
> Subject: [PHP-users 27590]正規表現についてご教授の程、よろしくお願いしま
す。
>
>
> > お世話になっております。水沼です。
> >
> > 以前に投稿致しました、正規表現についてのご質問の続きになるのですが、
> > 以下の様な正規表現による置換処理を行いたい場合は、どの様なパターンマッチ
> > を記述すれば良いのか悩んでおります。
> >
> > おわかりの方がおられましたらご教授の程、よろしくお願いします。
> >
> > ●内容
> > 掲示板の様なテキストエリアへの入力処理時に
> > 特定の文字の置換処理を行いたい。
> >
> >
> > ●想定をしている動作環境
> >
> >  ・送信文字列
> >   テスト<a href="http://www.yahoo.co.jp">yahoo</a>
> >   yahooです。
> >
> >
> >   ・置換処理後の想定している結果
> >   テスト<a href="http://www.yahoo.co.jp">yahoo</a>
> >   <a href="http://hoge.hoge">yahoo</a>です。
> >
> >
> > 1行目の「yahoo」というURLとURLリンクに記述されている文字には
> > 反応しないで、2行目の「yahoo」という文字に正規表現による置換処理
> > を行いたい。
> >
> > ※「yahoo」という文字列部分は、実環境時には変数で渡して他の言葉になりま
す。
> >
> > ご教授の程、よろしくお願い致します。
> >
>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
>




PHP-users メーリングリストの案内