人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

正規表現で"ld"(^ld)にはマッチするが、"Build"にはマッチしないようなものはどのように書けばよいのか教えてください。


ldの前にi以外の文字の0個以上の繰り返しを置けばよいかと思いましたが、

echo Build |perl -le "$_=<STDIN>; print /[^i]?ld/;"

では真になります。

●質問者: foobar_777
●カテゴリ:コンピュータ
✍キーワード:ECHO LD LE Perl print
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● GoldenDawn
●100ポイント
/(?<!Bui)ld/

ではどうでしょうか。

◎質問者からの返答

Perlではできました。ありがとうございます。

sedやJAVA等でも使える一般的な正規表現では実現できないのでしょうか?


2 ● angemaries
●0ポイント

?が不要なだけでは?

perl -le "$_=<STDIN>; print /[^i]ld/;"

◎質問者からの返答

これだとld (ldより先に何もつけない)にもマッチしません。

ちなみに環境は以下のとおりです。

This is perl, v5.8.7 built for MSWin32-x86-multi-thread


3 ● randk
●10ポイント

てもとにらくだぼんないので完璧ではないですが・・・

>echo Build |perl -le "$_=<STDIN>; print /[^i]?ld/;"

echo Build |perl -le "$_=<STDIN>; print /[^i]ld/;"

でどうですかね?

文頭にldがあるときに真を返す必要がある場合はこれプラス

/^ld/

を条件に加える必要がありますが・・・。

◎質問者からの返答

ldの前になにか文字列がある場合にはおっしゃるとおりの正規表現でOKです。

今、手元にPerlがあるのでPerlでためしていますが、他の環境でも使いたいので

できれば、らくだ本に乗っているようなPerl独自の正規表現ではないほうがいいです。


4 ● angemaries
●100ポイント

行頭もありと記述されてましたね。見落としです。

perl -le "$_=<STDIN>; print/^[^i]*ld/;"

◎質問者からの返答

できました。どうもありがとうございます。


5 ● rouge_2008
●10ポイント

以下でいかがでしょうか?

/^ld$/

「ld?」にもマッチさせたい場合は、「/^ld.*/」にします。

.(任意の文字)、*(0回以上の繰り返し)、^(行の先頭)、$(行の末尾)は、sedやJavaでも使えるようですから、おそらく大丈夫ではないかと思います。

http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231161/

http://www.site-cooler.com/java/j2se/regex.htm

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ