<量指定子>
*
0回以上のマッチ。(最長マッチ)
PS>"abc" -match "a*";$matches[0] PS>"bbc" -match "a*";$matches[0] |
*は直前文字の0回以上の繰り返しなので基本的には何でもマッチしてしまう。
これだけだと「*」の存在価値が見えてこないのでMSDNのサンプルをちょっと調べてみた。
PS>"92" -match "91*";$matches[0] True 9 PS>"91" -match "91*\b";$matches[0] True 91 PS>"92" -match "91*\b";$matches[0] False |
はっきり言って正規表現初心者の私には難しい内容だが、
最初の例は「1」はあってもなくても良いので「9」がマッチ。
2番目の例(\bはワード境界で終わっている指定)は「91」がマッチ。
っで、3番目だが、「1」自体はあってもなくても良いのだが無いとなると結果的に「9」が終端になっていなければいけない、という事でFalseになるという事と解釈した。
ちなみに、最長マッチというのは、”aaa” –match “a*”としたときに、「a」、「aa」、「aaa」とマッチする中の一番長い「aaa」とのマッチを採用しますってことでしょう。
+
1回以上のマッチ。(最長マッチ)
PS>"aabbcc" -match 'b+';$matches[0] |
?
0回または1回のマッチ。(最長マッチ)
PS>"ba" -match 'a?';$matches[0] PS>"aa" -match 'a?';$matches[0] PS>"第1章" -match '第\d\d?章' |
?も*と同じく0回も含むので、後ろにパターンが続くときに使うケースが多いのかと思う。
{n}
n回のマッチ。
PS>"abba" -match 'ab{2}';$matches[0] |
{n,}
n回以上のマッチ。 (最長マッチ)
PS>"abbba" -match 'ab{2,}';$matches[0] |
{n,m}
n回以上m回以下のマッチ。(最長マッチ)
PS>"abbbba" -match 'ab{1,3}';$matches[0] |
?
これまでの量指定子の後ろに付加して最短マッチを表す。
*?,+?,??,{n,}?,{n,m}?
PS>"abbcd" -match 'ab*';$matches[0] PS>"abbcd" -match 'ab+';$matches[0] PS>"abbcd" -match 'ab?';$matches[0] PS>"abbcd" -match 'ab{1,}';$matches[0] PS>"abbbba" -match 'ab{1,3}';$matches[0] |
??などは今ひとつ使い所がピンと来ないが意味合い的には難しくない。
最小マッチのサンプルとして以前、PowerShell: ◆Split演算子で書いたサンプルをそのまま載せておく。
PS>gc "C:\Documents and Settings\minminnana\デスクトップ\test.txt" | |
最短マッチの指定をしないと行の先頭の”<”と最後の”>”にマッチして行全体が区切り文字と認識されてしまう。
0 件のコメント:
コメントを投稿