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



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

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

では真になります。

回答の条件
  • 1人2回まで
  • 登録:2009/05/12 23:50:10
  • 終了:2009/05/13 01:19:44

回答(5件)

id:GoldenDawn No.1

GoldenDawn回答回数426ベストアンサー獲得回数812009/05/13 00:24:14

ポイント100pt
/(?<!Bui)ld/

ではどうでしょうか。

id:foobar_777

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

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

2009/05/13 00:29:28
id:angemaries No.2

angemaries回答回数80ベストアンサー獲得回数22009/05/13 00:28:02

?が不要なだけでは?

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

id:foobar_777

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

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

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

2009/05/13 00:48:04
id:randk No.3

randk回答回数77ベストアンサー獲得回数42009/05/13 00:32:27

ポイント10pt

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

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

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

でどうですかね?

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

/^ld/

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

id:foobar_777

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

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

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

2009/05/13 00:56:49
id:angemaries No.4

angemaries回答回数80ベストアンサー獲得回数22009/05/13 01:14:23

ポイント100pt

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

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

id:foobar_777

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

2009/05/13 01:17:46
id:rouge_2008 No.5

rouge_2008回答回数593ベストアンサー獲得回数3502009/05/13 01:16:09

ポイント10pt

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

/^ld$/

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

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

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

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

  • id:pigment
    正規表現には方言があるのは当たり前なので、あちこちで動くことを想定するのには限界がありますよってことはご存知ですよね?
  • id:Craftworks
    Perl であれば、\b(単語境界)を使います。sed でも使えます。/\bld/

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません