ldの前にi以外の文字の0個以上の繰り返しを置けばよいかと思いましたが、
echo Build |perl -le "$_=<STDIN>; print /[^i]?ld/;"
では真になります。
?が不要なだけでは?
perl -le "$_=<STDIN>; print /[^i]ld/;"
これだとld (ldより先に何もつけない)にもマッチしません。
ちなみに環境は以下のとおりです。
This is perl, v5.8.7 built for MSWin32-x86-multi-thread
てもとにらくだぼんないので完璧ではないですが・・・
>echo Build |perl -le "$_=<STDIN>; print /[^i]?ld/;"
echo Build |perl -le "$_=<STDIN>; print /[^i]ld/;"
でどうですかね?
文頭にldがあるときに真を返す必要がある場合はこれプラス
/^ld/
を条件に加える必要がありますが・・・。
ldの前になにか文字列がある場合にはおっしゃるとおりの正規表現でOKです。
今、手元にPerlがあるのでPerlでためしていますが、他の環境でも使いたいので
できれば、らくだ本に乗っているようなPerl独自の正規表現ではないほうがいいです。
行頭もありと記述されてましたね。見落としです。
perl -le "$_=<STDIN>; print/^[^i]*ld/;"
できました。どうもありがとうございます。
以下でいかがでしょうか?
/^ld$/
「ld~」にもマッチさせたい場合は、「/^ld.*/」にします。
.(任意の文字)、*(0回以上の繰り返し)、^(行の先頭)、$(行の末尾)は、sedやJavaでも使えるようですから、おそらく大丈夫ではないかと思います。
Perlではできました。ありがとうございます。
sedやJAVA等でも使える一般的な正規表現では実現できないのでしょうか?