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

回答の条件
  • 1人5回まで
  • 登録:2008/12/18 10:56:16
  • 終了:2008/12/20 15:03:14

ベストアンサー

id:rouge_2008 No.2

rouge_2008回答回数593ベストアンサー獲得回数3502008/12/19 01:57:31

ポイント50pt

「?」は量指定子の一つで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 ?」で検索して置換すれば良いことになります。

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

id:dedara

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

わかりやすいです。

2008/12/20 15:02:41

その他の回答(1件)

id:van-dine No.1

van-dine回答回数108ベストアンサー獲得回数112008/12/18 11:20:05

ポイント30pt

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

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

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

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

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

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

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

id:dedara

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

2008/12/20 15:02:05
id:rouge_2008 No.2

rouge_2008回答回数593ベストアンサー獲得回数3502008/12/19 01:57:31ここでベストアンサー

ポイント50pt

「?」は量指定子の一つで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 ?」で検索して置換すれば良いことになります。

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

id:dedara

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

わかりやすいです。

2008/12/20 15:02:41

コメントはまだありません

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

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

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

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