argra****@users*****
argra****@users*****
2008年 7月 17日 (木) 20:35:27 JST
Index: docs/perl/5.10.0/perlfaq6.pod diff -u docs/perl/5.10.0/perlfaq6.pod:1.7 docs/perl/5.10.0/perlfaq6.pod:1.8 --- docs/perl/5.10.0/perlfaq6.pod:1.7 Wed Jul 9 03:40:20 2008 +++ docs/perl/5.10.0/perlfaq6.pod Thu Jul 17 20:35:27 2008 @@ -762,14 +762,13 @@ =end original -You can watch Perl's regular expression engine at work to verify for -yourself if Perl is recompiling a regular expression. +Perl が正規表現を再コンパイルしたときに自分自身で検証するために、動作中の +Perl の正規表現エンジンを見守ることもできます。 C<use re 'debug'> プラグマ (Perl 5.005 以降で実装されています) は詳細を 表示します。 5.6 より前の Perl では、各反復で正規表現がコンパイルされる毎に C<re> の 報告を見ることになります。 Perl 5.6 以降では、最初の反復でのみ C<re> の報告を見ることになります。 -(TBT) use re 'debug'; @@ -1247,11 +1246,10 @@ =end original -Ensure that you know what \b really does: it's the boundary between a -word character, \w, and something that isn't a word character. That -thing that isn't a word character might be \W, but it can also be the -start or end of the string. -(TBT) +実際に \b が何を行うかをしっかり理解してください: +これは単語文字 (\w) と、単語文字でない何かとの境界です。 +単語文字でないというのは \W かもしれませんが、文字列の最初と最後にも +あります。 =begin original @@ -1390,20 +1388,19 @@ =end original プログラムのどこかでそういった変数が使われているのを見つけてしまうと、 -Perlはすべてのパターンマッチに対してそれに対処することを +Perl はすべてのパターンマッチングに対してそれに対処することを やらなければなりません。 -That means -that on every pattern match the entire string will be copied, part of it -to $`, part to $&, and part to $'. Thus the penalty is most severe with -long strings and patterns that match often. +これは、全てのパターンマッチングに置いて、一部は $` に、一部は $& に、 +一部は $' に、という形で文字列全体がコピーされるということを意味します。 +従って、ペナルティは長い文字列とパターンを何度もマッチングさせるときに +最も厳しいものとなります。 可能であれば $& や $'、$` を使わないようにすべきなのですが、 -それができないのであれば、 -一度これらの変数を使ってしまったら好きなように使いましょう。 +それができないのであれば、一度これらの変数を使ってしまったら好きなように +使いましょう。 なぜなら、罰金はすでに払ってしまったのですから。 アルゴリズムの中にはこういった変数を使うことが適切であるものが あるということに注意してください。 リリース 5.005 からは、$& はもはや“高価な”ものではありません。 -(TBT) =begin original @@ -1425,7 +1422,7 @@ =head2 What good is C<\G> in a regular expression? X<\G> -(正規表現の中でC<\G> を使うと何が良いのですか?) +(正規表現の中で C<\G> を使うと何が良いのですか?) =begin original @@ -1443,18 +1440,17 @@ =end original -You use the C<\G> anchor to start the next match on the same -string where the last match left off. The regular -expression engine cannot skip over any characters to find -the next match with this anchor, so C<\G> is similar to the -beginning of string anchor, C<^>. The C<\G> anchor is typically -used with the C<g> flag. It uses the value of C<pos()> -as the position to start the next match. As the match -operator makes successive matches, it updates C<pos()> with the -position of the next character past the last match (or the -first character of the next match, depending on how you like -to look at it). Each string has its own C<pos()> value. -(TBT) +次のマッチングを同じ文字列のうち、前回のマッチングを中止したところから +始めるために C<\G> アンカーを使います。 +正規表現エンジンはこのアンカーがあるときには次のマッチングを探すために +何の文字も読み飛ばさないので、C<\G> は文字列先頭アンカーである C<^> と +似ています。 +C<\G> アンカーは典型的には C<g> フラグと共に使います。 +これは次のマッチングの開始位置として C<pos()> の値を使います。 +マッチング演算子がマッチングに成功すると、C<pos()> の値を最後のマッチングの +次の文字(または次のマッチングの最初の文字; これはあなたがこれをどのように +見るかの問題です)の位置に更新します。 +各文字列はそれぞれ独自の C<pos()> の値を持ちます。 =begin original @@ -1467,13 +1463,12 @@ =end original -Suppose you want to match all of consecutive pairs of digits -in a string like "1122a44" and stop matching when you -encounter non-digits. You want to match C<11> and C<22> but -the letter <a> shows up between C<22> and C<44> and you want -to stop at C<a>. Simply matching pairs of digits skips over -the C<a> and still matches C<44>. -(TBT) +"1122a44" のような文字列で、連続した数字のペアの全てにマッチングし、数字で +ないものが現れたら停止したいとします。 +C<11> と C<22> にはマッチングしたいですが、C<22> と C<44> の間に C<a> が +現れると、C<a> で停止したいとします。 +数字のペアのマッチングは単に C<a> を読み飛ばし、引き続き C<44> に +マッチングします。 $_ = "1122a44"; my @pairs = m/(\d\d)/g; # qw( 11 22 44 ) @@ -1488,12 +1483,10 @@ =end original -If you use the C<\G> anchor, you force the match after C<22> to -start with the C<a>. The regular expression cannot match -there since it does not find a digit, so the next match -fails and the match operator returns the pairs it already -found. -(TBT) +C<\G> アンカーを使うと、C<22> の後のマッチングを C<a> から始めることを +強制します。 +ここでは数字が見付からないのでマッチングできず、従って次のマッチングは +失敗してマッチング演算子は既に見付かったペアを返します。 $_ = "1122a44"; my @pairs = m/\G(\d\d)/g; # qw( 11 22 ) @@ -1548,11 +1541,9 @@ C<pos()> のリセットを抑制できます。 引き続くマッチングは、その間に同じ文字列でのマッチングが失敗していても、 直前の成功したマッチングが終了した場所 (C<pos()> の値) から開始されます。 -この場合、the match after -the C<while()> loop starts at the C<a> (where the last match stopped), -and since it does not use any anchor it can skip over the C<a> to find -C<44>. -(TBT) +この場合、C<while()> ループの後のマッチングは (最後のマッチングが停止した) +C<a> から開始され、何のアンカーも使っていないので、C<44> を見つけるために +C<a> をスキップできます。 $_ = "1122a44"; while( m/\G(\d\d)/gc ) @@ -1571,11 +1562,10 @@ =end original -Typically you use the C<\G> anchor with the C<c> flag -when you want to try a different match if one fails, -such as in a tokenizer. +典型的には、トークナイザのようなものの中で、一つのマッチングに失敗した +ときに他のマッチングを試したいときに、C<\G> アンカーに C<c> フラグを +つけて使います。 Jeffrey Friedl が、5.004 以降で動作する、これに関する例を提供してくれました。 -(TBT) while (<>) { chomp;