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

正規表現『?』と『??』の違いを説明してください。『??』の使い方がよくわかりません

●質問者: dedara
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:正規表現
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● van-dine
●30ポイント

「?」は最長マッチといわれるもので、

性格は最も長いものにマッチします。

/123?/で"123"を探索すると123にマッチします。

一方、「??」は最短マッチと呼ばれるもので、

性格は最も短いものにマッチします。

/123?/で"123"を探索すると12にマッチします。

同じような使い方として、「/*?/」「/+?/」「{2,4}?」などがあります。

◎質問者からの返答

回答ありがとうございます。


2 ● rouge_2008
●50ポイント ベストアンサー

「?」は量指定子の一つで0個または1個を表します。

他には「*」(0個以上)や「+」(1個以上)があります。

「{n}」(n個)、「{n,}」(n個以上)、「{n,m}」(n個以上m個以下)という指定方法もあります。

これらの量指定子の後ろに?をつけた場合は、最短マッチになります。

http://www.rfs.jp/sb/perl/02/09.html

http://www.kent-web.com/perl/chap7.html


123?は1の後ろに2があり、その後ろに3があってもなくても良いということになります。

12

123

1233333

という文字列があった場合、

12と123と1233333の123の部分にマッチします。

123??は最短マッチなので、

12と123の12の部分と1233333の12の部分にマッチします。

123??と123*?は、同じ結果になります。

??や*?の直前の文字列を除いた部分に一致させたい場合に使用すれば良いのではないかと思います。

具体例が思い浮かばないのですが、以下のような文字列があった場合に、スペースの有無は現状のままでWindowsをWinに変更したい場合には、「Windows ??」で検索して置換すれば良いことになります。

Windows 98

Windows Me

Windows 2000

Windows XP

Windows Vista

windows98

windowsMe

Windows2000

逆に、スペースの有無まで統一したい場合は、「Windows ?」で検索して置換すれば良いことになります。

「*?」や「+?」は使う機会が良くあると思うのですが、「??」はあまり使う機会がないかもしれませんね。

◎質問者からの返答

具体例も挙げていただきありがとうございます。

わかりやすいです。

関連質問


●質問をもっと探す●



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