作者: 藤岡和夫
日時: 2003/1/17(22:56)
On Fri, 17 Jan 2003 16:36:39 +0900 (JST)
YIX06325@... (Penelotty) さんwrote:

> メタキャラクタ,“?”の値(?)によって,置換を制御したいのですが….
> 
> 例えば下記のような,命令があるとします,
> 
> $lovelove=~s/前田愛|愛|前田亜季|亜季|中田あすみ|あすみ|村田ちひろ|ちひろ|村上東奈|東奈(ちゃん)?/<font color=#ff0000>$1<\/font>/g;
> 
> このとき“?”へのHITが0回の時は,実質的に“1)”のような挙動をおこさせる,
> 1回の時は“2)”のように実行させたいのです.
> 
> 1).$lovelove=~s/前田愛|愛|前田亜季|亜季|中田あすみ|あすみ|村田ちひろ|ちひろ|村上東奈|東奈(ちゃん)?/<font color=#ff0000>$1ちゃん<\/font>/g;
> 2).$lovelove=~s/前田愛|愛|前田亜季|亜季|中田あすみ|あすみ|村田ちひろ|ちひろ|村上東奈|東奈(ちゃん)?/<font color=#ff0000>$1<\/font>/g;
> 
> トリックでなく,正道なスクリプトとして可能でしょうか?
> ご教示のほど,よろしく願います.

 ?は0回または1回マッチするという意味ですから、どちらにもマッチするわけ
で、条件分岐するためのものではありません。

 次のようなスクリプトを動かしてみては、

$lovelove = "前田愛ちゃんだよーん";
if($lovelove =~ s/(前田愛|愛|前田亜季|亜季|中田あすみ|あすみ|村田ちひろ|ちひろ|村上東奈|東奈)(?!ちゃん)/<font color=#ff0000>$1ちゃん<\/font>/g){
    print $lovelove, "(1)\n";
}elsif($lovelove =~ s/(前田愛|愛|前田亜季|亜季|中田あすみ|あすみ|村田ちひろ|ちひろ|村上東奈|東奈)ちゃん)/<font color=#ff0000>$1<\/font>/g){
    print $lovelove, "(2)\n";
}

藤岡 和夫
FGALTS@...
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/