argra****@users*****
argra****@users*****
2011年 12月 2日 (金) 20:49:28 JST
Index: docs/perl/5.10.1/perlrequick.pod diff -u docs/perl/5.10.1/perlrequick.pod:1.2 docs/perl/5.10.1/perlrequick.pod:1.3 --- docs/perl/5.10.1/perlrequick.pod:1.2 Sun Sep 18 18:53:22 2011 +++ docs/perl/5.10.1/perlrequick.pod Fri Dec 2 20:49:28 2011 @@ -254,10 +254,18 @@ 正規表現はほとんどの場合においてダブルクォートで囲まれた文字列のように 扱われるので、変数置換は動作します: +=begin original + $foo = 'house'; 'cathouse' =~ /cat$foo/; # matches 'housecat' =~ /${foo}cat/; # matches +=end original + + $foo = 'house'; + 'cathouse' =~ /cat$foo/; # マッチングする + 'housecat' =~ /${foo}cat/; # マッチングする + =begin original With all of the regexes above, if the regex matched anywhere in the @@ -313,10 +321,18 @@ 集合はその内側に置かれます。 以下はその例です: +=begin original + /cat/; # matches 'cat' /[bcr]at/; # matches 'bat', 'cat', or 'rat' "abc" =~ /[cab]/; # matches 'a' +=end original + + /cat/; # 'cat' にマッチングする + /[bcr]at/; # 'bat', 'cat', 'rat' のいずれかにマッチングする + "abc" =~ /[cab]/; # 'a' にマッチングする + =begin original In the last statement, even though C<'c'> is the first character in @@ -328,10 +344,18 @@ 正規表現がマッチングすることのできる最初の位置にある文字である C<'a'> が マッチングします。 +=begin original + /[yY][eE][sS]/; # match 'yes' in a case-insensitive way # 'yes', 'Yes', 'YES', etc. /yes/i; # also match 'yes' in a case-insensitive way +=end original + + /[yY][eE][sS]/; # 大文字小文字を無視して 'yes' にマッチングする + # 'yes', 'Yes', 'YES' など。 + /yes/i; # これも大文字小文字を無視して 'yes' にマッチングする + =begin original The last example shows a match with an C<'i'> B<modifier>, which makes @@ -339,9 +363,8 @@ =end original -The last example shows a match with an C<'i'> B<modifier>, which makes -the match case-insensitive. -(TBT) +最後の例は大文字小文字を無視してマッチングするようにする +C<'i'> B<修飾子> (modifier) を使ったマッチングを示しています。 =begin original @@ -353,12 +376,10 @@ =end original -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. +文字クラスも普通の文字と特殊文字がありますが、文字クラスの内側での +普通の文字と特殊文字は、文字クラスの外側の物とは違います。 文字クラスのために特殊な文字は C<-]\^$> で、エスケープを使って マッチングされます: -(TBT) =begin original @@ -667,9 +688,8 @@ 与えられた文字位置で、正規表現のマッチングを成功させるための 最初の選択肢はマッチングする一つとなります。 -Here, all the -alternatives match at the first string position, so the first matches. -(TBT) +ここでは、全ての選択はは最初の文字列位置でマッチングするので、 +最初のものがマッチングします。 =head2 Grouping things and hierarchical matching @@ -745,12 +765,22 @@ 格納されます。 これらの変数は通常の変数と同じように使うことができます: +=begin original + # extract hours, minutes, seconds $time =~ /(\d\d):(\d\d):(\d\d)/; # match hh:mm:ss format $hours = $1; $minutes = $2; $seconds = $3; +=end original + + # 時、分、秒を抽出する + $time =~ /(\d\d):(\d\d):(\d\d)/; # hh:mm:ss 形式にマッチングする + $hours = $1; + $minutes = $2; + $seconds = $3; + =begin original In list context, a match C</regex/> with groupings will return the @@ -793,8 +823,14 @@ B<後方参照> (backreferences) C<\1>, C<\2> …です。 後方参照は正規表現の I<内側> で使うことのできるマッチング変数です: +=begin original + /(\w\w\w)\s\1/; # find sequences like 'the the' in string +=end original + + /(\w\w\w)\s\1/; # 文字列中の 'the the' のような並びを探す + =begin original C<$1>, C<$2>, ... should only be used outside of a regex, and C<\1>, @@ -913,8 +949,8 @@ /[a-z]+\s+\d*/; # 小文字の単語、幾つかの空白、それに続く任意の長さの # 数字にマッチング /(\w+)\s+\1/; # 任意の長さの単語の重複にマッチング - $year =~ /\d{2,4}/; # 年が少なくとも2桁あるが最大でも4桁になるように - # する + $year =~ /\d{2,4}/; # 年が少なくとも 2 桁あるが最大でも 4 桁に + # なるようにする $year =~ /\d{4}|\d{2}/; # もっと良い。3桁をはじく =begin original @@ -928,12 +964,22 @@ 可能な限りの文字列をマッチングさせようとします。 従って、以下のようになります +=begin original + $x = 'the cat in the hat'; $x =~ /^(.*)(at)(.*)$/; # matches, # $1 = 'the cat in the h' # $2 = 'at' # $3 = '' (0 matches) +=end original + + $x = 'the cat in the hat'; + $x =~ /^(.*)(at)(.*)$/; # マッチングする + # $1 = 'the cat in the h' + # $2 = 'at' + # $3 = '' (0 回マッチング) + =begin original The first quantifier C<.*> grabs as much of the string as possible @@ -956,9 +1002,9 @@ =end original -There are a few more things you might want to know about matching -operators. In the code -(TBT) +マッチング演算子に関してあなたが知りたいと思っているであろうものが +あといくつかあります。 +次のコードで $pattern = 'Seuss'; while (<>) { @@ -982,10 +1028,18 @@ すべての置換を行いたくないというのであれば、特殊なデリミタ C<m''> を使います: +=begin original + @pattern = ('Seuss'); m/@pattern/; # matches 'Seuss' m'@pattern'; # matches the literal string '@pattern' +=end original + + @pattern = ('Seuss'); + m/@pattern/; # 'Seuss' にマッチングする + m'@pattern'; # リテラルな文字列 '@pattern' にマッチングする + =begin original The global modifier C<//g> allows the matching operator to match @@ -1046,11 +1100,20 @@ グループ化の指定がなければ、正規表現全体にマッチングするリストを返します。 従って +=begin original + @words = ($x =~ /(\w+)/g); # matches, # $word[0] = 'cat' # $word[1] = 'dog' # $word[2] = 'house' +=end original + + @words = ($x =~ /(\w+)/g); # マッチングする + # $word[0] = 'cat' + # $word[1] = 'dog' + # $word[2] = 'house' + =head2 Search and replace (検索と置換) @@ -1133,14 +1196,30 @@ マッチングした部分文字列の置換のために使います。 いくつか例を挙げます: +=begin original + # reverse all the words in a string $x = "the cat in the hat"; $x =~ s/(\w+)/reverse $1/ge; # $x contains "eht tac ni eht tah" +=end original + + # 文字列中の全ての単語を逆順にする + $x = "the cat in the hat"; + $x =~ s/(\w+)/reverse $1/ge; # $x は "eht tac ni eht tah" + +=begin original + # convert percentage to decimal $x = "A 39% hit rate"; $x =~ s!(\d+)%!$1/100!e; # $x contains "A 0.39 hit rate" +=end original + + # 百分率を 10 進数に置き換える + $x = "A 39% hit rate"; + $x =~ s!(\d+)%!$1/100!e; # $x は "A 0.39 hit rate" + =begin original The last example shows that C<s///> can use other delimiters, such as @@ -1171,10 +1250,8 @@ C<split /regex/, string, limit> は C<string> オペランドを部分文字列の リストに分割し、そのリストを返します。 -The regex determines the character sequence -that C<string> is split with respect to. +regex は、C<string> を分割するときに使われる文字並びを決定します。 たとえば、文字列を単語に分割するには以下のようにします -(TBT) $x = "Calvin and Hobbes"; @word = split /\s+/, $x; # $word[0] = 'Calvin' @@ -1187,8 +1264,7 @@ =end original -To extract a comma-delimited list of numbers, use -(TBT) +カンマ区切りの数値リストを展開するには、以下のようにします $x = "1.618,2.718, 3.142"; @const = split /,\s*/, $x; # $const[0] = '1.618' @@ -1260,5 +1336,11 @@ Ilya Zakharevich, Brad Hughes, and Mike Giroux for all their helpful comments. +=begin meta + +Translate: Kentaro Shirakata <argra****@ub32*****> + +=end meta + =cut