argra****@users*****
argra****@users*****
2011年 9月 18日 (日) 18:53:22 JST
Index: docs/perl/5.10.1/perlrequick.pod diff -u docs/perl/5.10.1/perlrequick.pod:1.1 docs/perl/5.10.1/perlrequick.pod:1.2 --- docs/perl/5.10.1/perlrequick.pod:1.1 Tue Sep 13 05:58:08 2011 +++ docs/perl/5.10.1/perlrequick.pod Sun Sep 18 18:53:22 2011 @@ -29,6 +29,8 @@ =head2 Simple word matching +(単純な単語のマッチング) + =begin original The simplest regex is simply a word, or more generally, a string of @@ -37,10 +39,8 @@ =end original -The simplest regex is simply a word, or more generally, a string of -characters. A regex consisting of a word matches any string that -contains that word: -(TBT) +最も単純な正規表現は単なる単語、より一般的には文字の並びです。 +正規表現は単語を構成する任意の文字列にマッチングする単語からなります: "Hello World" =~ /World/; # matches @@ -55,13 +55,13 @@ =end original -In this statement, C<World> is a regex and the C<//> enclosing -C</World/> tells perl to search a string for a match. The operator -C<=~> associates the string with the regex match and produces a true -value if the regex matched, or false if the regex did not match. In -our case, C<World> matches the second word in C<"Hello World">, so the -expression is true. This idea has several variations. -(TBT) +この文で、C<World> は正規表現であり、 C<//> で囲まれた C</World/> は +Perl に対してマッチングのために文字列を検索することを指示します。 +C<=~> という演算子は正規表現にマッチングする文字列に結び付けられ、 +正規表現がマッチングすれば真の値を生成し、マッチングしなければ偽となります。 +この例では、C<World> は C<"Hello World"> の二番目の単語にマッチングするので、 +式は真となります。 +この考え方にはいくつかのバリエーションがあります。 =begin original @@ -69,8 +69,7 @@ =end original -Expressions like this are useful in conditionals: -(TBT) +以下のような式は条件文で便利です: print "It matches\n" if "Hello World" =~ /World/; @@ -80,8 +79,7 @@ =end original -The sense of the match can be reversed by using C<!~> operator: -(TBT) +マッチングの成否の意味を反転する演算子 C<!~> があります: print "It doesn't match\n" if "Hello World" !~ /World/; @@ -91,8 +89,7 @@ =end original -The literal string in the regex can be replaced by a variable: -(TBT) +正規表現中のリテラル文字列は変数に置き換えることもができます: $greeting = "World"; print "It matches\n" if "Hello World" =~ /$greeting/; @@ -103,8 +100,7 @@ =end original -If you're matching against C<$_>, the C<$_ =~> part can be omitted: -(TBT) +C<$_> に対してマッチングを行う場合、C<$_ =~> の部分は省略できます: $_ = "Hello World"; print "It matches\n" if /World/; @@ -116,15 +112,23 @@ =end original -Finally, the C<//> default delimiters for a match can be changed to -arbitrary delimiters by putting an C<'m'> out front: -(TBT) +最後に、マッチングのための C<//> のデフォルトデリミタは C<'m'> を +前置することにより任意のものにすることができます: + +=begin original "Hello World" =~ m!World!; # matches, delimited by '!' "Hello World" =~ m{World}; # matches, note the matching '{}' "/usr/bin/perl" =~ m"/perl"; # matches after '/usr/bin', # '/' becomes an ordinary char +=end original + + "Hello World" =~ m!World!; # マッチングする。デリミタは '!' + "Hello World" =~ m{World}; # マッチングする。組になっている '{}' に注意 + "/usr/bin/perl" =~ m"/perl"; # 'usr/bin' の後にマッチングする + # '/' は普通の文字になっている + =begin original Regexes must match a part of the string I<exactly> in order for the @@ -132,26 +136,39 @@ =end original -Regexes must match a part of the string I<exactly> in order for the -statement to be true: -(TBT) +正規表現は、文が真となるためには I<正確に> 順序通りに文字列の +一部としてマッチングしなければなりません。 + +=begin original "Hello World" =~ /world/; # doesn't match, case sensitive "Hello World" =~ /o W/; # matches, ' ' is an ordinary char "Hello World" =~ /World /; # doesn't match, no ' ' at end +=end original + + "Hello World" =~ /world/; # マッチングしない; 大文字小文字は区別する + "Hello World" =~ /o W/; # マッチングする; ' ' は普通の文字 + "Hello World" =~ /World /; # マッチングしない; 末尾に ' ' はない + =begin original perl will always match at the earliest possible point in the string: =end original -perl will always match at the earliest possible point in the string: -(TBT) +Perl は常に文字列の中で最初に現れるものをマッチングしようとします: + +=begin original "Hello World" =~ /o/; # matches 'o' in 'Hello' "That hat is red" =~ /hat/; # matches 'hat' in 'That' +=end original + + "Hello World" =~ /o/; # 'Hello' の 'o' にマッチング + "That hat is red" =~ /hat/; # 'That' の中の 'hat' にマッチング + =begin original Not all characters can be used 'as is' in a match. Some characters, @@ -160,10 +177,11 @@ =end original -Not all characters can be used 'as is' in a match. Some characters, -called B<metacharacters>, are reserved for use in regex notation. -The metacharacters are -(TBT) +すべての文字がマッチングにおいて'あるがまま'(as is) に使われるのでは +ありません。 +I<メタ文字> と呼ばれる幾つかの文字が正規表現の記述に使うために +予約されています。 +メタ文字には以下のものがあります {}[]()^$.|*+?\ @@ -173,14 +191,22 @@ =end original -A metacharacter can be matched by putting a backslash before it: -(TBT) +メタ文字はバックスラッシュを前置することによってマッチングさせられます: + +=begin original "2+2=4" =~ /2+2/; # doesn't match, + is a metacharacter "2+2=4" =~ /2\+2/; # matches, \+ is treated like an ordinary + 'C:\WIN32' =~ /C:\\WIN/; # matches "/usr/bin/perl" =~ /\/usr\/bin\/perl/; # matches +=end original + + "2+2=4" =~ /2+2/; # マッチングしない。+ はメタ文字 + "2+2=4" =~ /2\+2/; # マッチングする。\+ 普通の + のように扱われる + 'C:\WIN32' =~ /C:\\WIN/; # マッチングする + "/usr/bin/perl" =~ /\/usr\/bin\/perl/; # マッチングする + =begin original In the last regex, the forward slash C<'/'> is also backslashed, @@ -188,9 +214,9 @@ =end original -In the last regex, the forward slash C<'/'> is also backslashed, -because it is used to delimit the regex. -(TBT) +最後の正規表現では、スラッシュ C<'/'> もまたバックスラッシュが +つけられています; +なぜなら、それが正規表現のデリミタとして使われているからです。 =begin original @@ -202,16 +228,22 @@ =end original -Non-printable ASCII characters are represented by B<escape sequences>. -Common examples are C<\t> for a tab, C<\n> for a newline, and C<\r> -for a carriage return. Arbitrary bytes are represented by octal -escape sequences, e.g., C<\033>, or hexadecimal escape sequences, -e.g., C<\x1B>: -(TBT) +印字できない ASCII 文字は B<エスケープシーケンス> によって表現されます。 +一般的な例では、タブを表す C<\t>、改行を表す C<\n>、復帰を表す C<\r> が +あります。 +任意のバイトは 8 進エスケープシーケンス (例えば C<\033>) あるいは +16 進エスケープシーケンス (例えば C<\x1B>) で表現できます: + +=begin original "1000\t2000" =~ m(0\t2) # matches "cat" =~ /\143\x61\x74/ # matches, but a weird way to spell cat +=end original + + "1000\t2000" =~ m(0\t2) # マッチングする + "cat" =~ /\143\x61\x74/ # マッチングするが、cat を綴る変な方法 + =begin original Regexes are treated mostly as double quoted strings, so variable @@ -219,9 +251,8 @@ =end original -Regexes are treated mostly as double quoted strings, so variable -substitution works: -(TBT) +正規表現はほとんどの場合においてダブルクォートで囲まれた文字列のように +扱われるので、変数置換は動作します: $foo = 'house'; 'cathouse' =~ /cat$foo/; # matches @@ -238,13 +269,16 @@ =end original -With all of the regexes above, if the regex matched anywhere in the -string, it was considered a match. To specify I<where> it should -match, we would use the B<anchor> metacharacters C<^> and C<$>. The -anchor C<^> means match at the beginning of the string and the anchor -C<$> means match at the end of the string, or before a newline at the -end of the string. Some examples: -(TBT) +これまでの正規表現では、文字列のどこかでマッチングすればマッチングしたと +みなしてきました。 +文字列の I<どこで> 正規表現がマッチングするのかを指定するには、 +I<アンカー> メタ文字である C<^> と C<$> を使います。 +アンカー C<^> は文字列の先頭でマッチングすることを意味し、アンカー C<$> は +文字列の末尾(あるいは文字列の末尾にある改行の前) でマッチングすることを +意味します。 +いくつか例を挙げます: + +=begin original "housekeeper" =~ /keeper/; # matches "housekeeper" =~ /^keeper/; # doesn't match @@ -252,8 +286,18 @@ "housekeeper\n" =~ /keeper$/; # matches "housekeeper" =~ /^housekeeper$/; # matches +=end original + + "housekeeper" =~ /keeper/; # マッチングする + "housekeeper" =~ /^keeper/; # マッチングしない + "housekeeper" =~ /keeper$/; # マッチングする + "housekeeper\n" =~ /keeper$/; # マッチングする + "housekeeper" =~ /^housekeeper$/; # マッチングする + =head2 Using character classes +(文字クラスを使う) + =begin original A B<character class> allows a set of possible characters, rather than @@ -263,11 +307,11 @@ =end original -A B<character class> allows a set of possible characters, rather than -just a single character, to match at a particular point in a regex. -Character classes are denoted by brackets C<[...]>, with the set of -characters to be possibly matched inside. Here are some examples: -(TBT) +B<文字クラス> は正規表現の特定の場所においてマッチングする可能性のある文字の +集合です(単一の文字ではありません)。 +文字クラスはブラケット C<[...]> で表現され、マッチングする可能性のある文字の +集合はその内側に置かれます。 +以下はその例です: /cat/; # matches 'cat' /[bcr]at/; # matches 'bat', 'cat', or 'rat' @@ -280,9 +324,9 @@ =end original -In the last statement, even though C<'c'> is the first character in -the class, the earliest point at which the regex can match is C<'a'>. -(TBT) +最後の文において、C<'c'> がクラスの最初の文字であるにもかかわらず +正規表現がマッチングすることのできる最初の位置にある文字である C<'a'> が +マッチングします。 /[yY][eE][sS]/; # match 'yes' in a case-insensitive way # 'yes', 'Yes', 'YES', etc. @@ -311,17 +355,27 @@ Character classes also have ordinary and special characters, but the sets of ordinary and special characters inside a character class are -different than those outside a character class. The special -characters for a character class are C<-]\^$> and are matched using an -escape: +different than those outside a character class. +文字クラスのために特殊な文字は C<-]\^$> で、エスケープを使って +マッチングされます: (TBT) +=begin original + /[\]c]def/; # matches ']def' or 'cdef' $x = 'bcr'; /[$x]at/; # matches 'bat, 'cat', or 'rat' /[\$x]at/; # matches '$at' or 'xat' /[\\$x]at/; # matches '\at', 'bat, 'cat', or 'rat' +=end original + + /[\]c]def/; # ']def' または 'cdef' にマッチング + $x = 'bcr'; + /[$x]at/; # 'bat', 'cat', 'rat' にマッチング + /[\$x]at/; # '$at' または 'xat' にマッチング + /[\\$x]at/; # '\at', 'bat, 'cat', 'rat' にマッチング + =begin original The special character C<'-'> acts as a range operator within character @@ -330,14 +384,21 @@ =end original -The special character C<'-'> acts as a range operator within character -classes, so that the unwieldy C<[0123456789]> and C<[abc...xyz]> -become the svelte C<[0-9]> and C<[a-z]>: -(TBT) +特殊文字 C<'-'> は文字クラスの中で範囲演算子として振舞うので、 +C<[0123456789]> や C<[abc...xyz]> のような +見づらいものはすっきりとした C<[0-9]> であるとか C<[a-z]> のように +書き換えられます: + +=begin original /item[0-9]/; # matches 'item0' or ... or 'item9' /[0-9a-fA-F]/; # matches a hexadecimal digit +=end original + + /item[0-9]/; # 'item0' ... 'item9' にマッチングする + /[0-9a-fA-F]/; # 16 進数にマッチングする + =begin original If C<'-'> is the first or last character in a character class, it is @@ -345,9 +406,8 @@ =end original -If C<'-'> is the first or last character in a character class, it is -treated as an ordinary character. -(TBT) +C<'-'> が文字クラスの中の最初か最後の文字であった場合、通常の文字として +扱われます。 =begin original @@ -358,25 +418,33 @@ =end original -The special character C<^> in the first position of a character class -denotes a B<negated character class>, which matches any character but -those in the brackets. Both C<[...]> and C<[^...]> must match a -character, or the match fails. Then -(TBT) +文字クラスの先頭の位置にある特殊文字 C<^> は B<反転文字クラス> を表し、 +ブラケットの中にない文字にマッチングします。 +C<[...]> と C<[^...]> の両方とも、一つの文字にマッチングせねばならず、 +そうでない場合にはマッチングは失敗します。 +ですから + +=begin original /[^a]at/; # doesn't match 'aat' or 'at', but matches # all other 'bat', 'cat, '0at', '%at', etc. /[^0-9]/; # matches a non-numeric character /[a^]at/; # matches 'aat' or '^at'; here '^' is ordinary +=end original + + /[^a]at/; # 'aat' や 'at' にはマッチングしないが、その他の + # 'bat', 'cat, '0at', '%at' などにはマッチングする + /[^0-9]/; # 数字以外にマッチングする + /[a^]at/; # 'aat' か '^at'にマッチングする。ここでは '^' は通常の文字 + =begin original Perl has several abbreviations for common character classes: =end original -Perl has several abbreviations for common character classes: -(TBT) +Perl は一般的な文字クラスの略記法を持っています: =over 4 @@ -388,8 +456,7 @@ =end original -\d is a digit and represents -(TBT) +\d は数字で、以下のものを表します [0-9] @@ -401,8 +468,7 @@ =end original -\s is a whitespace character and represents -(TBT) +\s は空白文字で、以下のものを表します [\ \t\r\n\f] @@ -414,8 +480,7 @@ =end original -\w is a word character (alphanumeric or _) and represents -(TBT) +\w は単語を構成する文字(英数字 と _)で、以下のものを表します [0-9a-zA-Z_] @@ -427,8 +492,7 @@ =end original -\D is a negated \d; it represents any character but a digit -(TBT) +\D は \d の否定形です; 数字以外の文字を表します [^0-9] @@ -440,8 +504,7 @@ =end original -\S is a negated \s; it represents any non-whitespace character -(TBT) +\S は \s の否定形です; 非空白文字を表します [^\s] @@ -453,8 +516,7 @@ =end original -\W is a negated \w; it represents any non-word character -(TBT) +\W は \w の否定形です; 単語を構成しない文字を表します [^\w] @@ -466,8 +528,7 @@ =end original -The period '.' matches any character but "\n" -(TBT) +ピリオド '.' は "\n" 以外の任意の文字にマッチングします =back @@ -478,9 +539,10 @@ =end original -The C<\d\s\w\D\S\W> abbreviations can be used both inside and outside -of character classes. Here are some in use: -(TBT) +C<\d\s\w\D\S\W> の省略記法は文字クラスの内側でも外側でも使うことができます。 +以下はその例です: + +=begin original /\d\d:\d\d:\d\d/; # matches a hh:mm:ss time format /[\d\s]/; # matches any digit or whitespace character @@ -490,6 +552,16 @@ /end\./; # matches 'end.' /end[.]/; # same thing, matches 'end.' +=end original + + /\d\d:\d\d:\d\d/; # hh:mm:ss 形式の時間表記にマッチング + /[\d\s]/; # 数字または空白にマッチング + /\w\W\w/; # 非単語文字が続きさらに単語文字が続く + # 単語文字にマッチング + /..rt/; # 'rt' が続く任意の二文字にマッチング + /end\./; # 'end.' にマッチング + /end[.]/; # 同じこと。'end.' にマッチング + =begin original The S<B<word anchor> > C<\b> matches a boundary between a word @@ -497,15 +569,24 @@ =end original -The S<B<word anchor> > C<\b> matches a boundary between a word -character and a non-word character C<\w\W> or C<\W\w>: -(TBT) +S<B<語アンカー> > (word anchor) C<\b> はこれは単語を構成する文字と単語を +構成しない文字の間 C<\w\W> や C<\W\w> の境界にマッチングします: + +=begin original $x = "Housecat catenates house and cat"; $x =~ /\bcat/; # matches cat in 'catenates' $x =~ /cat\b/; # matches cat in 'housecat' $x =~ /\bcat\b/; # matches 'cat' at end of string +=end original + + $x = "Housecat catenates house and cat"; + $x =~ /cat/; # 'housecat' の cat にマッチング + $x =~ /\bcat/; # 'catenates' の cat にマッチング + $x =~ /cat\b/; # 'housecat' の cat にマッチング + $x =~ /\bcat\b/; # 文字列の終端の'cat'にマッチング + =begin original In the last example, the end of the string is considered a word @@ -513,12 +594,12 @@ =end original -In the last example, the end of the string is considered a word -boundary. -(TBT) +最後の例では、文字列の終端は単語境界として認識されています。 =head2 Matching this or that +(あれやこれやにマッチングする) + =begin original We can match different character strings with the B<alternation> @@ -532,19 +613,30 @@ =end original -We can match different character strings with the B<alternation> -metacharacter C<'|'>. To match C<dog> or C<cat>, we form the regex -C<dog|cat>. As before, perl will try to match the regex at the -earliest possible point in the string. At each character position, -perl will first try to match the first alternative, C<dog>. If -C<dog> doesn't match, perl will then try the next alternative, C<cat>. -If C<cat> doesn't match either, then the match fails and perl moves to -the next position in the string. Some examples: -(TBT) +異なる文字列を B<選択> メタ文字 C<'|'> によって行えます。 +C<dog> または C<cat> にマッチングさせるには、正規表現を +C<dog|cat> のようにします。 +以前述べた通り、Perlは文字列の可能な限り最も早い位置でマッチングを +行おうとします。 +それぞれの文字位置で、Perlはまずはじめに最初の選択である C<dog> に +マッチングさせることを試みます。 +もし C<dog> がマッチングしなければ、Perl は次の選択肢である C<cat> を +試します。 +C<cat> もまたマッチングしなければ、マッチングは失敗してPerlは文字列の +次の位置に移動します。 +幾つか例を挙げましょう: + +=begin original "cats and dogs" =~ /cat|dog|bird/; # matches "cat" "cats and dogs" =~ /dog|cat|bird/; # matches "cat" + +=end original + + "cats and dogs" =~ /cat|dog|bird/; # "cat" にマッチング + "cats and dogs" =~ /dog|cat|bird/; # "cat" にマッチング + =begin original Even though C<dog> is the first alternative in the second regex, @@ -552,13 +644,19 @@ =end original -Even though C<dog> is the first alternative in the second regex, -C<cat> is able to match earlier in the string. -(TBT) +二番目の正規表現において最初の選択肢が C<dog> であるにもかかわらず、 +C<cat> が文字列で最初に現れるマッチング対象です。 + +=begin original "cats" =~ /c|ca|cat|cats/; # matches "c" "cats" =~ /cats|cat|ca|c/; # matches "cats" +=end original + + "cats" =~ /c|ca|cat|cats/; # "c" にマッチング + "cats" =~ /cats|cat|ca|c/; # "cats" にマッチング + =begin original At a given character position, the first alternative that allows the @@ -567,13 +665,16 @@ =end original -At a given character position, the first alternative that allows the -regex match to succeed will be the one that matches. Here, all the +与えられた文字位置で、正規表現のマッチングを成功させるための +最初の選択肢はマッチングする一つとなります。 +Here, all the alternatives match at the first string position, so the first matches. (TBT) =head2 Grouping things and hierarchical matching +(グループ化と階層的マッチング) + =begin original The B<grouping> metacharacters C<()> allow a part of a regex to be @@ -584,25 +685,49 @@ =end original -The B<grouping> metacharacters C<()> allow a part of a regex to be -treated as a single unit. Parts of a regex are grouped by enclosing -them in parentheses. The regex C<house(cat|keeper)> means match -C<house> followed by either C<cat> or C<keeper>. Some more examples -are -(TBT) +B<グループ化> メタ文字 C<()> は正規表現の一部分を一つのユニットとして +扱うことを許します。 +ある正規表現の一部はカッコによって囲まれることでグループ化されます。 +正規表現 C<house(cat|keeper)> は、C<cat> か C<keeper> が後続する +C<house> にマッチングすることを意味します。 +幾つか例を挙げましょう + +=begin original /(a|b)b/; # matches 'ab' or 'bb' /(^a|b)c/; # matches 'ac' at start of string or 'bc' anywhere +=end original + + /(a|b)b/; # 'ab' または 'bb' にマッチング + /(^a|b)c/; # 文字列の先頭にある 'ac' か任意の場所の'bc'にマッチング + +=begin original + /house(cat|)/; # matches either 'housecat' or 'house' /house(cat(s|)|)/; # matches either 'housecats' or 'housecat' or # 'house'. Note groups can be nested. +=end original + + /house(cat|)/; # 'housecat' か 'house' にマッチング + /house(cat(s|)|)/; # 'housecats' か 'housecat' か 'house' のいずれかに + # マッチング。グループがネストできることに注意 + +=begin original + "20" =~ /(19|20|)\d\d/; # matches the null alternative '()\d\d', # because '20\d\d' can't match +=end original + + "20" =~ /(19|20|)\d\d/; # 空の選択肢 '()\d\d' にマッチング + # '20\d\d' はマッチングできないから + =head2 Extracting matches +(マッチングしたものを取り出す) + =begin original The grouping metacharacters C<()> also allow the extraction of the @@ -612,11 +737,13 @@ =end original -The grouping metacharacters C<()> also allow the extraction of the -parts of a string that matched. For each grouping, the part that -matched inside goes into the special variables C<$1>, C<$2>, etc. -They can be used just as ordinary variables: -(TBT) +グループ化メタ文字 C<()> はまた、まったく異なる別の機能を有しています: +マッチングした文字列の一部分を展開することができるのです・これは一般的に、 +マッチングしたものを見つけ出したり、テキスト処理のために非常に +便利なものです。 +それぞれのグループ化に対して、マッチングした部分が特殊変数 C<$1>, C<$2> などに +格納されます。 +これらの変数は通常の変数と同じように使うことができます: # extract hours, minutes, seconds $time =~ /(\d\d):(\d\d):(\d\d)/; # match hh:mm:ss format @@ -631,9 +758,9 @@ =end original -In list context, a match C</regex/> with groupings will return the -list of matched values C<($1,$2,...)>. So we could rewrite it as -(TBT) +リストコンテキストでは、グループ化付きのマッチング C</regex/> は +マッチングした値のリスト C<($1,$2,...)> を返します。 +従ってこれは以下のように書き換えられます ($hours, $minutes, $second) = ($time =~ /(\d\d):(\d\d):(\d\d)/); @@ -646,11 +773,10 @@ =end original -If the groupings in a regex are nested, C<$1> gets the group with the -leftmost opening parenthesis, C<$2> the next opening parenthesis, -etc. For example, here is a complex regex and the matching variables -indicated below it: -(TBT) +正規表現中のグループ化がネストしていた場合、C<$1> は最も左にある +開きかっこによってグループ化されているものを取り、C<$2> は +次の開きかっこによるものを取り…となっていきます。 +例えば、以下は複雑な正規表現と、後述するマッチング変数です: /(ab(cd|ef)((gi)|j))/; 1 2 34 @@ -663,10 +789,9 @@ =end original -Associated with the matching variables C<$1>, C<$2>, ... are -the B<backreferences> C<\1>, C<\2>, ... Backreferences are -matching variables that can be used I<inside> a regex: -(TBT) +マッチング変数 C<$1>, C<$2> …に密接に結び付けられたものは、 +B<後方参照> (backreferences) C<\1>, C<\2> …です。 +後方参照は正規表現の I<内側> で使うことのできるマッチング変数です: /(\w\w\w)\s\1/; # find sequences like 'the the' in string @@ -677,12 +802,13 @@ =end original -C<$1>, C<$2>, ... should only be used outside of a regex, and C<\1>, -C<\2>, ... only inside a regex. -(TBT) +C<$1>, C<$2> …は正規表現の外側のみで用い、 +後方参照 C<\1>, C<\2> …は正規表現の内側でのみ使うようにすべきです。 =head2 Matching repetitions +(マッチングの繰り返し) + =begin original The B<quantifier> metacharacters C<?>, C<*>, C<+>, and C<{}> allow us @@ -693,12 +819,12 @@ =end original -The B<quantifier> metacharacters C<?>, C<*>, C<+>, and C<{}> allow us -to determine the number of repeats of a portion of a regex we -consider to be a match. Quantifiers are put immediately after the -character, character class, or grouping that we want to specify. They -have the following meanings: -(TBT) +B<量指定子> (quatifier) C<?>, C<*>, C<+>, C<{}> によって、 +マッチングさせたいと考えている正規表現の一部分の繰り返し回数を +指定できます。 +量指定子は繰り返しを指定したい文字、文字クラス、またはグループの直後に +置きます。 +量指定子には以下のような意味があります: =over 4 @@ -710,8 +836,7 @@ =end original -C<a?> = match 'a' 1 or 0 times -(TBT) +C<a?> は: 'a' または空文字列にマッチングします。 =item * @@ -721,8 +846,7 @@ =end original -C<a*> = match 'a' 0 or more times, i.e., any number of times -(TBT) +C<a*> は: 'a' のゼロ回以上の繰り返しにマッチングします。 =item * @@ -732,8 +856,7 @@ =end original -C<a+> = match 'a' 1 or more times, i.e., at least once -(TBT) +C<a+> は: 'a' の一回以上の繰り返しにマッチングします。 =item * @@ -744,9 +867,7 @@ =end original -C<a{n,m}> = match at least C<n> times, but not more than C<m> -times. -(TBT) +C<a{n,m}> は: C<n> 回以上 C<m> 回以下の繰り返しにマッチングします。 =item * @@ -756,8 +877,7 @@ =end original -C<a{n,}> = match at least C<n> or more times -(TBT) +C<a{n,}> は: C<n> 回以上の繰り返しにマッチングします。 =item * @@ -767,8 +887,7 @@ =end original -C<a{n}> = match exactly C<n> times -(TBT) +C<a{n}> は: C<n> 回の繰り返しにマッチングします。 =back @@ -778,8 +897,9 @@ =end original -Here are some examples: -(TBT) +以下に幾つか例を挙げます: + +=begin original /[a-z]+\s+\d*/; # match a lowercase word, at least some space, and # any number of digits @@ -788,6 +908,15 @@ # than 4 digits $year =~ /\d{4}|\d{2}/; # better match; throw out 3 digit dates +=end original + + /[a-z]+\s+\d*/; # 小文字の単語、幾つかの空白、それに続く任意の長さの + # 数字にマッチング + /(\w+)\s+\1/; # 任意の長さの単語の重複にマッチング + $year =~ /\d{2,4}/; # 年が少なくとも2桁あるが最大でも4桁になるように + # する + $year =~ /\d{4}|\d{2}/; # もっと良い。3桁をはじく + =begin original These quantifiers will try to match as much of the string as possible, @@ -795,9 +924,9 @@ =end original -These quantifiers will try to match as much of the string as possible, -while still allowing the regex to match. So we have -(TBT) +これらの量指定子はは正規表現のマッチングが成功するのを許す範囲で +可能な限りの文字列をマッチングさせようとします。 +従って、以下のようになります $x = 'the cat in the hat'; $x =~ /^(.*)(at)(.*)$/; # matches, @@ -813,10 +942,10 @@ =end original -The first quantifier C<.*> grabs as much of the string as possible -while still having the regex match. The second quantifier C<.*> has -no string left to it, so it matches 0 times. -(TBT) +最初の量指定子 C<.*> は正規表現がマッチングする範囲で可能な限りの +長い文字列をつかみとります。 +2 番目の量指定子は C<.*> には文字列が残されていないので、0 回 +マッチングします。 =head2 More matching @@ -845,11 +974,13 @@ =end original -perl has to re-evaluate C<$pattern> each time through the loop. If -C<$pattern> won't be changing, use the C<//o> modifier, to only -perform variable substitutions once. If you don't want any -substitutions at all, use the special delimiter C<m''>: -(TBT) +Perl はループを回るたびごとに C<$pattern> を +再評価しなければなりません。 +もし C<$pattern> が変化しないものであるなら、 +Perl に変数の置換をただ一度だけ行うように指示する C<//o> 修飾子を +使います。 +すべての置換を行いたくないというのであれば、特殊なデリミタ +C<m''> を使います: @pattern = ('Seuss'); m/@pattern/; # matches 'Seuss' @@ -866,13 +997,13 @@ =end original -The global modifier C<//g> allows the matching operator to match -within a string as many times as possible. In scalar context, -successive matches against a string will have C<//g> jump from match -to match, keeping track of position in the string as it goes along. -You can get or set the position with the C<pos()> function. -For example, -(TBT) +グローバル修飾子 C<//g> は、マッチング演算子に対して +文字列の中で可能な限りの回数マッチングするようにします。 +スカラコンテキストでは、ある文字列に対する連続したマッチングは +マッチングからマッチングへとジャンプする C<//g> を持ち、その文字列の中での +位置を記憶します。 +C<pos()> 関数を使ってこの位置を取り出したり設定したりすることができます。 +例えば、 $x = "cat dog house"; # 3 words while ($x =~ /(\w+)/g) { @@ -885,8 +1016,7 @@ =end original -prints -(TBT) +は以下を表示します Word is cat, ends at position 3 Word is dog, ends at position 7 @@ -900,10 +1030,10 @@ =end original -A failed match or changing the target string resets the position. If -you don't want the position reset after failure to match, add the -C<//c>, as in C</regex/gc>. -(TBT) +マッチングに失敗したり、ターゲット文字列を変更するとこの位置は +リセットされます。 +もしマッチングに失敗したときに位置をリセットしたくないのであれば、 +C</regexp/gc> のように C<//c> を追加します。 =begin original @@ -912,9 +1042,9 @@ =end original -In list context, C<//g> returns a list of matched groupings, or if -there are no groupings, a list of matches to the whole regex. So -(TBT) +リストコンテキストでは、C<//g> はマッチングしたグループのリストを返します。 +グループ化の指定がなければ、正規表現全体にマッチングするリストを返します。 +従って @words = ($x =~ /(\w+)/g); # matches, # $word[0] = 'cat' @@ -923,6 +1053,8 @@ =head2 Search and replace +(検索と置換) + =begin original Search and replace is performed using C<s/regex/replacement/modifiers>. @@ -935,14 +1067,17 @@ =end original -Search and replace is performed using C<s/regex/replacement/modifiers>. -The C<replacement> is a Perl double quoted string that replaces in the -string whatever is matched with the C<regex>. The operator C<=~> is -also used here to associate a string with C<s///>. If matching -against C<$_>, the S<C<$_ =~> > can be dropped. If there is a match, -C<s///> returns the number of substitutions made, otherwise it returns -false. Here are a few examples: -(TBT) +検索と置換は C<s/regexp/replacement/modifiers> を使って処理されます。 +C<replacement> は Perlでのダブルクォートで囲まれた文字列で、 +C<regexp> にマッチングした文字列を置き換えるものです。 +C<=~> 演算子もまた C<s///> を伴った文字列に結びつけられるために +使われます。 +C<$_> に対してマッチングを行う場合には、S<C<$_ =~> > は省略できます。 +マッチングに成功した場合には C<s///> は置換が行われた数を返し、失敗した +場合には偽を返します。 +幾つか例を挙げましょう: + +=begin original $x = "Time to feed the cat!"; $x =~ s/cat/hacker/; # $x contains "Time to feed the hacker!" @@ -950,6 +1085,14 @@ $y =~ s/^'(.*)'$/$1/; # strip single quotes, # $y contains "quoted words" +=end original + + $x = "Time to feed the cat!"; + $x =~ s/cat/hacker/; # $x の内容は "Time to feed the hacker!" + $y = "'quoted words'"; + $y =~ s/^'(.*)'$/$1/; # シングルクォートを剥ぎ取る + # $y の内容は "quoted words" + =begin original With the C<s///> operator, the matched variables C<$1>, C<$2>, etc. @@ -959,17 +1102,25 @@ =end original -With the C<s///> operator, the matched variables C<$1>, C<$2>, etc. -are immediately available for use in the replacement expression. With -the global modifier, C<s///g> will search and replace all occurrences -of the regex in the string: -(TBT) +C<s///> 演算子を使うにあたって、C<$1>, C<$2> といったマッチング変数は +その置換式のなかで即座に使うことができます。 +グローバル修飾子 C<s///g> を使うことで、文字列中のすべての正規表現に +マッチングする検索と置換を行います: + +=begin original $x = "I batted 4 for 4"; $x =~ s/4/four/; # $x contains "I batted four for 4" $x = "I batted 4 for 4"; $x =~ s/4/four/g; # $x contains "I batted four for four" +=end original + + $x = "I batted 4 for 4"; + $x =~ s/4/four/; # $x の内容は "I batted four for 4" + $x = "I batted 4 for 4"; + $x =~ s/4/four/g; # $x の内容は "I batted four for four" + =begin original The evaluation modifier C<s///e> wraps an C<eval{...}> around the @@ -978,10 +1129,9 @@ =end original -The evaluation modifier C<s///e> wraps an C<eval{...}> around the -replacement string and the evaluated result is substituted for the -matched substring. Some examples: -(TBT) +評価修飾子 C<s///e> は置換文字列を C<eval{...}> でラップし、その評価結果を +マッチングした部分文字列の置換のために使います。 +いくつか例を挙げます: # reverse all the words in a string $x = "the cat in the hat"; @@ -1000,14 +1150,16 @@ =end original -The last example shows that C<s///> can use other delimiters, such as -C<s!!!> and C<s{}{}>, and even C<s{}//>. If single quotes are used -C<s'''>, then the regex and replacement are treated as single quoted -strings. -(TBT) +最後の例のように、C<s///> も C<s!!!> や C<s{}{}> 、 +果ては C<s{}//> のように異なるデリミタを使うことができます。 +C<s'''> のようにシングルクォートが使われた場合、その正規表現と +置換テキストはシングルクォート文字列のように扱われ、変数の置き換えは +行われません。 =head2 The split operator +(split 演算子) + =begin original C<split /regex/, string> splits C<string> into a list of substrings @@ -1017,10 +1169,11 @@ =end original -C<split /regex/, string> splits C<string> into a list of substrings -and returns that list. The regex determines the character sequence -that C<string> is split with respect to. For example, to split a -string into words, use +C<split /regex/, string, limit> は C<string> オペランドを部分文字列の +リストに分割し、そのリストを返します。 +The regex determines the character sequence +that C<string> is split with respect to. +たとえば、文字列を単語に分割するには以下のようにします (TBT) $x = "Calvin and Hobbes"; @@ -1050,10 +1203,9 @@ =end original -If the empty regex C<//> is used, the string is split into individual -characters. If the regex has groupings, then the list produced contains -the matched substrings from the groupings as well: -(TBT) +C<//> が使われた場合には、文字列は個々の文字に分割されます。 +正規表現がグループ化を伴っていた場合には、グループ化されたものも部分文字列に +含まれるようになります: $x = "/usr/bin"; @parts = split m!(/)!, $x; # $parts[0] = '' @@ -1069,9 +1221,8 @@ =end original -Since the first character of $x matched the regex, C<split> prepended -an empty initial element to the list. -(TBT) +$x の最初の文字に正規表現がマッチングしているので、C<split> はリストの +最初の要素に空要素を置きます。 =head1 BUGS