=encoding euc-jp =head1 NAME X X X =begin original perlre - Perl regular expressions =end original perlre - Perl の正規表現 =head1 DESCRIPTION =begin original This page describes the syntax of regular expressions in Perl. =end original このページでは Perl での正規表現の構文について説明します。 =begin original If you haven't used regular expressions before, a quick-start introduction is available in L, and a longer tutorial introduction is available in L. =end original もしこれまでに正規表現を使ったことがないのであれば、 L にクイックスタートが、L に 長めのチュートリアルがあります。 =begin original For reference on how regular expressions are used in matching operations, plus various examples of the same, see discussions of C, C, C and C?> in L. =end original 正規表現をマッチング操作でどのように使うかやそれに関する様々な例に 関しては、L にある C, C, C, C?> の説明を参照して下さい。 =head2 Modifiers (修飾子) =begin original Matching operations can have various modifiers. Modifiers that relate to the interpretation of the regular expression inside are listed below. Modifiers that alter the way a regular expression is used by Perl are detailed in L and L. =end original マッチング操作には様々な修飾子(modifier)があります。 修飾子は正規表現内の解釈に関連する物で、次に一覧にしています。 Perl が正規表現を使う方法を変更する 修飾子は L 及び L に 説明されています。 =over 4 =item m X X X X =begin original Treat string as multiple lines. That is, change "^" and "$" from matching the start or end of line only at the left and right ends of the string to matching them anywhere within the string. =end original 文字列を複数行として扱います。 つまり、"^" 及び "$" は文字列の左右の端のみの行頭と行末に対する マッチングから、文字列中の任意の位置に対するマッチングへと変更されます。 =item s X X X X =begin original Treat string as single line. That is, change "." to match any character whatsoever, even a newline, which normally it would not match. =end original 文字列を 1 行として扱います。 つまり、"." は任意の 1 文字、通常はマッチングしない改行でさえも マッチングするように変更されます。 =begin original Used together, as C, they let the "." match any character whatsoever, while still allowing "^" and "$" to match, respectively, just after and just before newlines within the string. =end original C として共に使うと、"^" 及び "$" はそれぞれ 文字列中の改行の直前及び直後のマッチングでありつつ、"." は任意の文字に マッチングするようになります。 =item i X X X X =begin original Do case-insensitive pattern matching. =end original 大文字小文字を区別しないパターンマッチングを行います。 =begin original If locale matching rules are in effect, the case map is taken from the current locale for code points less than 255, and from Unicode rules for larger code points. However, matches that would cross the Unicode rules/non-Unicode rules boundary (ords 255/256) will not succeed. See L. =end original ロケールマッチングルールが有効になっている場合、符号位置 255 以下の場合は 現在のロケールから取られ、より大きい符号位置では Unicode ルールから 取られます。 しかし、Unicode ルールと非 Unicode ルールの境界(番号255/256) を またぐマッチングは成功しません。 L を参照してください。 =begin original There are a number of Unicode characters that match multiple characters under C. For example, C should match the sequence C. Perl is not currently able to do this when the multiple characters are in the pattern and are split between groupings, or when one or more are quantified. Thus =end original C の基で複数の文字にマッチングする Unicode 文字はたくさんあります。 例えば、C は並び C にマッチングするべきです。 複数の文字がパターン中にあってグループ化で分割されている場合、または どれかの文字に量指定子が付いている場合、Perl は今のところこれを行えません。 従って =begin original "\N{LATIN SMALL LIGATURE FI}" =~ /fi/i; # Matches "\N{LATIN SMALL LIGATURE FI}" =~ /[fi][fi]/i; # Doesn't match! "\N{LATIN SMALL LIGATURE FI}" =~ /fi*/i; # Doesn't match! =end original "\N{LATIN SMALL LIGATURE FI}" =~ /fi/i; # マッチング "\N{LATIN SMALL LIGATURE FI}" =~ /[fi][fi]/i; # マッチングしない! "\N{LATIN SMALL LIGATURE FI}" =~ /fi*/i; # マッチングしない! =begin original # The below doesn't match, and it isn't clear what $1 and $2 would # be even if it did!! "\N{LATIN SMALL LIGATURE FI}" =~ /(f)(i)/i; # Doesn't match! =end original # 次のものはマッチングしないし、もししたとしても $1 と $2 が何になるか # はっきりしない!! "\N{LATIN SMALL LIGATURE FI}" =~ /(f)(i)/i; # マッチングしない! =begin original Perl doesn't match multiple characters in a bracketed character class unless the character that maps to them is explicitly mentioned, and it doesn't match them at all if the character class is inverted, which otherwise could be highly confusing. See L, and L. =end original Perl は、明示的にマッピングについて言及されていない限り、 大かっこ文字クラスの複数の文字にはマッチングしません; そして文字クラスが否定された場合はそれらには全くマッチングしません; さもなければとても混乱することがあるからです。 L と L を参照して下さい。 =item x X =begin original Extend your pattern's legibility by permitting whitespace and comments. Details in L"/x"> =end original 空白やコメントを許可してパターンを読みやすくするように拡張します。 詳細は L"/x"> にあります。 =item p X
=end original この問題に対する解決策として、Perl 5.10.0 からは C<$`>, C<$&>, C<$'> と 等価だけれども C
=head2 Quoting metacharacters (メタ文字のクォート) =begin original Backslashed metacharacters in Perl are alphanumeric, such as C<\b>, C<\w>, C<\n>. Unlike some other regular expression languages, there are no backslashed symbols that aren't alphanumeric. So anything that looks like \\, \(, \), \[, \], \{, or \} is always interpreted as a literal character, not a metacharacter. This was once used in a common idiom to disable or quote the special meanings of regular expression metacharacters in a string that you want to use for a pattern. Simply quote all non-"word" characters: =end original Perl においてバックスラッシュで表現されるメタ文字は C<\b>, C<\w>, C<\n> のように英数字です。 他の正規表現言語とは異なり、英数字でないシンボルのバックスラッシュは ありません。 なので \\, \(, \), \[, \], \{, \} といったものは全てメタ文字ではなく リテラル文字です。 これはパターンで使いたい文字列の中で正規表現のメタ文字としての特殊な意味を 無効化またはクォートするための一般的な指標として使われてきました。 「単語」でない全ての文字は単にクォートします: $pattern =~ s/(\W)/\\$1/g; =begin original (If C is set, then this depends on the current locale.) Today it is more common to use the quotemeta() function or the C<\Q> metaquoting escape sequence to disable all metacharacters' special meanings like this: =end original (もし C が有効であれば、これは現在のロケールに依存します。) 今日では特殊な意味を持つメタ文字を全て無効にするためには次のように quotemeta() 関数か C<\Q> メタクォートエスケープシーケンスを使うのが より一般的です: /$unquoted\Q$quoted\E$unquoted/ =begin original Beware that if you put literal backslashes (those not inside interpolated variables) between C<\Q> and C<\E>, double-quotish backslash interpolation may lead to confusing results. If you I to use literal backslashes within C<\Q...\E>, consult L. =end original C<\Q> 及び C<\E> の間でリテラルとしてバックスラッシュをおくとき (埋め込んだ変数の中でではない)には、二重にクォートしたバックスラッシュの 埋め込みは困惑した結果となるでしょう。 もし C<\Q...\E> でリテラルとしてのバックスラッシュを使う I<必要がある> のなら、 L を参照してください。 =begin original C and C<\Q> are fully described in L. =end original C と C<\Q> は L に完全に記述されています。 =head2 Extended Patterns (拡張パターン) =begin original Perl also defines a consistent extension syntax for features not found in standard tools like B and B. The syntax for most of these is a pair of parentheses with a question mark as the first thing within the parentheses. The character after the question mark indicates the extension. =end original Perl は B や B といった標準的なツールでは見られない機能のための 拡張構文も定義しています。 これらのほとんどの構文は対のかっことかっこ内の最初に疑問符の形をとります。 疑問符の後の文字で拡張を区別します。 =begin original The stability of these extensions varies widely. Some have been part of the core language for many years. Others are experimental and may change without warning or be completely removed. Check the documentation on an individual feature to verify its current status. =end original 拡張構文の安定度は様々です。 中には長年言語コアの一部となっている物もあります。 そうでなく実験的に追加され警告なしに変更されたり削除されるものも 中にはあります。 それぞれのステータスに関しては個々の機能のドキュメントを確認してください。 =begin original A question mark was chosen for this and for the minimal-matching construct because 1) question marks are rare in older regular expressions, and 2) whenever you see one, you should stop and "question" exactly what is going on. That's psychology.... =end original 疑問符は 1) それが古い正規表現で使われることは稀であること、そして 2) それを見かけると何が行われるのか本当に「疑問に」思って止まることから、 これのためと最小マッチング構成子のために選ばれました。 これが心理学です…。 =over 4 =item C<(?#text)> X<(?#)> =begin original A comment. The text is ignored. If the C modifier enables whitespace formatting, a simple C<#> will suffice. Note that Perl closes the comment as soon as it sees a C<)>, so there is no way to put a literal C<)> in the comment. =end original コメント。 テキストは無視されます。 C 修飾子によって空白の整形が有効にされていれば単なる C<#> でも十分です。 Perl は C<)> を見つけると直ぐにコメントを閉じる点に注意してください; この為リテラル C<)> をコメント中におくことはできません。 =item C<(?adlupimsx-imsx)> =item C<(?^alupimsx)> X<(?)> X<(?^)> =begin original One or more embedded pattern-match modifiers, to be turned on (or turned off, if preceded by C<->) for the remainder of the pattern or the remainder of the enclosing pattern group (if any). =end original 一つもしくは複数のパターンマッチング修飾子; パターンの残りまたは(もしあれば)包含しているパターングループの残りで 有効にする(または C<-> が前置されていれば解除する)。 =begin original This is particularly useful for dynamic patterns, such as those read in from a configuration file, taken from an argument, or specified in a table somewhere. Consider the case where some patterns want to be case-sensitive and some do not: The case-insensitive ones merely need to include C<(?i)> at the front of the pattern. For example: =end original これは設定ファイルから読む、引数から取る、どこかのテーブルで 指定されている箇所からダイナミックなパターンを使うときに特に便利です。 パターンの一部では大文字小文字を区別したいけれども別の箇所では 区別しないといったケースを考えてみます: 区別をしない場所では 単にパターンの先頭に C<(?i)> を含めるだけです。 例えば: $pattern = "foobar"; if ( /$pattern/i ) { } # more flexible: $pattern = "(?i)foobar"; if ( /$pattern/ ) { } =begin original These modifiers are restored at the end of the enclosing group. For example, =end original これらの修飾子は包含しているグループの最後で復元(restore)されます。 例えば、 ( (?i) blah ) \s+ \g1 =begin original will match C in any case, some spaces, and an exact (I!) repetition of the previous word, assuming the C modifier, and no C modifier outside this group. =end original は C に大文字小文字の区別なくマッチングし、 いくつかの空白、そして前の単語その物(I<大文字小文字の区別まで含めて>!)に 再度マッチングします; ここではこのグループの外側で C 修飾子を持ち、 C 修飾子を持たないものとします。 =begin original These modifiers do not carry over into named subpatterns called in the enclosing group. In other words, a pattern such as C<((?i)(?&NAME))> does not change the case-sensitivity of the "NAME" pattern. =end original これらの修飾子は囲まれたグループで呼び出された名前付き部分パターンには 持ち越されません。 言い換えると、C<((?i)(?&NAME))> のようなパターンは、"NAME" パターンが 大文字小文字を認識するのを変更しません。 =begin original Any of these modifiers can be set to apply globally to all regular expressions compiled within the scope of a C. See L. =end original それらの変更のどれもセットでき、Cのスコープ内でグローバルに 全てのコンパイルされた正規表現に適用されます。L を見てください。 =begin original Starting in Perl 5.14, a C<"^"> (caret or circumflex accent) immediately after the C<"?"> is a shorthand equivalent to C. Flags (except C<"d">) may follow the caret to override it. But a minus sign is not legal with it. =end original Perl 5.14から、C<"^">(キャレットか曲折アクセント)がC<"?">のすぐ 後ろにつくと、Cと同じになります。フラグ(C<"d">以外の) をキャレットに続けることで、上書きできます。 ですが、マイナス記号は一緒に使えません。 =begin original Note that the C, C, C, C, and C modifiers are special in that they can only be enabled, not disabled, and the C, C, C, and C modifiers are mutually exclusive: specifying one de-specifies the others, and a maximum of one (or two C's) may appear in the construct. Thus, for example, C<(?-p)> will warn when compiled under C; C<(?-d:...)> and C<(?dl:...)> are fatal errors. =end original C, C, C, C, C 修飾子は有効にできるのみで、無効にはできない点、 そして C, C, C, C 修飾子は互いに排他であるという点で特別です: 一つを指定すると他のものの指定を解除し、構文中に最大で一つ (または二つの C) だけが現れます。 従って 例えば C<(?-p)> は C の下でコンパイルされると 警告を発します; C<(?-d:...)> と C<(?dl:...)> は致命的エラーです。 =begin original Note also that the C modifier is special in that its presence anywhere in a pattern has a global effect. =end original パターン中のどこにあってもグローバルな影響があるという意味で C 修飾子が特別であることにも注意してください。 =item C<(?:pattern)> X<(?:)> =item C<(?adluimsx-imsx:pattern)> =item C<(?^aluimsx:pattern)> X<(?^:)> =begin original This is for clustering, not capturing; it groups subexpressions like "()", but doesn't make backreferences as "()" does. So =end original これはキャプチャではなくクラスタです; これは "()" のように部分式を グループ化しますが "()" が行うような後方参照は行いません。 つまり、 @fields = split(/\b(?:a|b|c)\b/) =begin original is like =end original は次と同様ですが @fields = split(/\b(a|b|c)\b/) =begin original but doesn't spit out extra fields. It's also cheaper not to capture characters if you don't need to. =end original 余計なフィールドを引き出しません。 また不要であれば文字のキャプチャを行わないため低コストです。 =begin original Any letters between C> and C<:> act as flags modifiers as with C<(?adluimsx-imsx)>. For example, =end original C> 及び C<:> の間の文字は C<(?adluimsx-imsx)> のようなフラグ修飾子として 動作します。 例えば、 /(?s-i:more.*than).*million/i =begin original is equivalent to the more verbose =end original はより冗長に書けば以下と等価です /(?:(?s-i)more.*than).*million/i =begin original Starting in Perl 5.14, a C<"^"> (caret or circumflex accent) immediately after the C<"?"> is a shorthand equivalent to C. Any positive flags (except C<"d">) may follow the caret, so =end original Perl 5.14から、C<"^">(キャレットか曲折アクセント)がC<"?">のすぐ 後ろにつくと、Cと同じになります。 どのような肯定のフラグ(C<"d">以外の)もキャレットに続けることができます; そのため、 (?^x:foo) =begin original is equivalent to =end original は、以下と同じになります。 (?x-ims:foo) =begin original The caret tells Perl that this cluster doesn't inherit the flags of any surrounding pattern, but uses the system defaults (C), modified by any flags specified. =end original キャレットは、Perlにこのクラスターはパターンの周りのどのフラグも 引き継がずに、代わりに、システムのデフォルトのフラグ(C) を使うことを教えます; 指定されている他のフラグによって変更されます。 =begin original The caret allows for simpler stringification of compiled regular expressions. These look like =end original キャレットはより簡単なコンパイルされた正規表現の文字列化をすることが できます。次のものは (?^:pattern) =begin original with any non-default flags appearing between the caret and the colon. A test that looks at such stringification thus doesn't need to have the system default flags hard-coded in it, just the caret. If new flags are added to Perl, the meaning of the caret's expansion will change to include the default for those flags, so the test will still work, unchanged. =end original キャレットとコロンの間には、デフォルトでないフラグがありません。 このような文字列化を見るテストには、したがって、システムのデフォルトのフラグを その中にハードコードする必要はなく、ただキャレットを使います。新しいフラグが Perlに追加されたら、キャレットを展開した意味はそれらのフラグのためのデフォルトを 含むように変更されます; そのために、このテストは、それでも何も変えずに 動くでしょう。 =begin original Specifying a negative flag after the caret is an error, as the flag is redundant. =end original キャレットの後ろに否定のフラグを付けると、余計なフラグであるとして、 エラーになります。 =begin original Mnemonic for C<(?^...)>: A fresh beginning since the usual use of a caret is to match at the beginning. =end original C<(?^...)>の覚え方: 新鮮な開始; 通常のキャレットの使い方は文字列の開始の マッチなので。 =item C<(?|pattern)> X<(?|)> X =begin original This is the "branch reset" pattern, which has the special property that the capture groups are numbered from the same starting point in each alternation branch. It is available starting from perl 5.10.0. =end original これは各代替分岐において捕捉グループを同じ番号から始める特殊な 属性を持っている、「ブランチリセット(branch reset)」パターンです。 これは perl 5.10.0 から提供されています。 =begin original Capture groups are numbered from left to right, but inside this construct the numbering is restarted for each branch. =end original 捕捉グループは左から右へと番号が振られますが、この構成子の内側では 各分岐毎に番号はリセットされます。 =begin original The numbering within each branch will be as normal, and any groups following this construct will be numbered as though the construct contained only one branch, that being the one with the most capture groups in it. =end original 各分岐内での番号付けは通常通りに行われ、この構成子の後に続くグループは その中で捕捉グループが一番多かった分岐のみが 格納されていたかのように番号付けされていきます。 =begin original This construct is useful when you want to capture one of a number of alternative matches. =end original この構成子はいくつかの代替マッチングの1つを捕捉したいときに便利です。 =begin original Consider the following pattern. The numbers underneath show in which group the captured content will be stored. =end original 以下のパターンを想像してみてください。 下側の番号は内容の格納されるグループを示します。 # before ---------------branch-reset----------- after / ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x # 1 2 2 3 2 3 4 =begin original Be careful when using the branch reset pattern in combination with named captures. Named captures are implemented as being aliases to numbered groups holding the captures, and that interferes with the implementation of the branch reset pattern. If you are using named captures in a branch reset pattern, it's best to use the same names, in the same order, in each of the alternations: =end original 名前付き捕捉と枝リセットパターンを組み合わせて使うときには注意してください。 名前付き捕捉は捕捉を保持している番号付きグループへの別名として 実装されていて、枝リセットパターンの実装を妨害します。 枝リセットパターンで名前付き捕捉を使うときは、それぞれの代替で 同じ名前を同じ順番で使うのが最良です: /(?| (? x ) (? y ) | (? z ) (? w )) /x =begin original Not doing so may lead to surprises: =end original そうしないと驚くことになります: "12" =~ /(?| (? \d+ ) | (? \D+))/x; say $+ {a}; # Prints '12' say $+ {b}; # *Also* prints '12'. =begin original The problem here is that both the group named C<< a >> and the group named C<< b >> are aliases for the group belonging to C<< $1 >>. =end original ここでの問題は、C<< a >> という名前のグループと C<< b >> という名前の が両方ともグループ C<< $1 >> への別名であることです。 =item Look-Around Assertions X X X X =begin original Look-around assertions are zero-width patterns which match a specific pattern without including it in C<$&>. Positive assertions match when their subpattern matches, negative assertions match when their subpattern fails. Look-behind matches text up to the current match position, look-ahead matches text following the current match position. =end original 先読み及び後読みの言明(assertion)は C<$&> の中に 含めない特定のパターンにマッチングするゼロ幅のパターンです。 正の言明はその部分パターンがマッチングしたときにマッチングし、 負の言明はその部分パターンが失敗したときにマッチングします。 後読みのマッチングは今のマッチング位置までのテキストにマッチングし、 先読みの言明は今のマッチング位置の先にあるテキストにマッチングします。 =over 4 =item C<(?=pattern)> X<(?=)> X
, and C modifiers are special in that they can only be enabled, not disabled, and the C, C, C, and C modifiers are mutually exclusive: specifying one de-specifies the others, and a maximum of one (or two C's) may appear in the construct. Thus, for example, C<(?-p)> will warn when compiled under C; C<(?-d:...)> and C<(?dl:...)> are fatal errors. =end original C, C, C, C, C 修飾子は有効にできるのみで、無効にはできない点、 そして C, C, C, C 修飾子は互いに排他であるという点で特別です: 一つを指定すると他のものの指定を解除し、構文中に最大で一つ (または二つの C) だけが現れます。 従って 例えば C<(?-p)> は C の下でコンパイルされると 警告を発します; C<(?-d:...)> と C<(?dl:...)> は致命的エラーです。 =begin original Note also that the C modifier is special in that its presence anywhere in a pattern has a global effect. =end original パターン中のどこにあってもグローバルな影響があるという意味で C 修飾子が特別であることにも注意してください。 =item C<(?:pattern)> X<(?:)> =item C<(?adluimsx-imsx:pattern)> =item C<(?^aluimsx:pattern)> X<(?^:)> =begin original This is for clustering, not capturing; it groups subexpressions like "()", but doesn't make backreferences as "()" does. So =end original これはキャプチャではなくクラスタです; これは "()" のように部分式を グループ化しますが "()" が行うような後方参照は行いません。 つまり、 @fields = split(/\b(?:a|b|c)\b/) =begin original is like =end original は次と同様ですが @fields = split(/\b(a|b|c)\b/) =begin original but doesn't spit out extra fields. It's also cheaper not to capture characters if you don't need to. =end original 余計なフィールドを引き出しません。 また不要であれば文字のキャプチャを行わないため低コストです。 =begin original Any letters between C> and C<:> act as flags modifiers as with C<(?adluimsx-imsx)>. For example, =end original C> 及び C<:> の間の文字は C<(?adluimsx-imsx)> のようなフラグ修飾子として 動作します。 例えば、 /(?s-i:more.*than).*million/i =begin original is equivalent to the more verbose =end original はより冗長に書けば以下と等価です /(?:(?s-i)more.*than).*million/i =begin original Starting in Perl 5.14, a C<"^"> (caret or circumflex accent) immediately after the C<"?"> is a shorthand equivalent to C. Any positive flags (except C<"d">) may follow the caret, so =end original Perl 5.14から、C<"^">(キャレットか曲折アクセント)がC<"?">のすぐ 後ろにつくと、Cと同じになります。 どのような肯定のフラグ(C<"d">以外の)もキャレットに続けることができます; そのため、 (?^x:foo) =begin original is equivalent to =end original は、以下と同じになります。 (?x-ims:foo) =begin original The caret tells Perl that this cluster doesn't inherit the flags of any surrounding pattern, but uses the system defaults (C), modified by any flags specified. =end original キャレットは、Perlにこのクラスターはパターンの周りのどのフラグも 引き継がずに、代わりに、システムのデフォルトのフラグ(C) を使うことを教えます; 指定されている他のフラグによって変更されます。 =begin original The caret allows for simpler stringification of compiled regular expressions. These look like =end original キャレットはより簡単なコンパイルされた正規表現の文字列化をすることが できます。次のものは (?^:pattern) =begin original with any non-default flags appearing between the caret and the colon. A test that looks at such stringification thus doesn't need to have the system default flags hard-coded in it, just the caret. If new flags are added to Perl, the meaning of the caret's expansion will change to include the default for those flags, so the test will still work, unchanged. =end original キャレットとコロンの間には、デフォルトでないフラグがありません。 このような文字列化を見るテストには、したがって、システムのデフォルトのフラグを その中にハードコードする必要はなく、ただキャレットを使います。新しいフラグが Perlに追加されたら、キャレットを展開した意味はそれらのフラグのためのデフォルトを 含むように変更されます; そのために、このテストは、それでも何も変えずに 動くでしょう。 =begin original Specifying a negative flag after the caret is an error, as the flag is redundant. =end original キャレットの後ろに否定のフラグを付けると、余計なフラグであるとして、 エラーになります。 =begin original Mnemonic for C<(?^...)>: A fresh beginning since the usual use of a caret is to match at the beginning. =end original C<(?^...)>の覚え方: 新鮮な開始; 通常のキャレットの使い方は文字列の開始の マッチなので。 =item C<(?|pattern)> X<(?|)> X =begin original This is the "branch reset" pattern, which has the special property that the capture groups are numbered from the same starting point in each alternation branch. It is available starting from perl 5.10.0. =end original これは各代替分岐において捕捉グループを同じ番号から始める特殊な 属性を持っている、「ブランチリセット(branch reset)」パターンです。 これは perl 5.10.0 から提供されています。 =begin original Capture groups are numbered from left to right, but inside this construct the numbering is restarted for each branch. =end original 捕捉グループは左から右へと番号が振られますが、この構成子の内側では 各分岐毎に番号はリセットされます。 =begin original The numbering within each branch will be as normal, and any groups following this construct will be numbered as though the construct contained only one branch, that being the one with the most capture groups in it. =end original 各分岐内での番号付けは通常通りに行われ、この構成子の後に続くグループは その中で捕捉グループが一番多かった分岐のみが 格納されていたかのように番号付けされていきます。 =begin original This construct is useful when you want to capture one of a number of alternative matches. =end original この構成子はいくつかの代替マッチングの1つを捕捉したいときに便利です。 =begin original Consider the following pattern. The numbers underneath show in which group the captured content will be stored. =end original 以下のパターンを想像してみてください。 下側の番号は内容の格納されるグループを示します。 # before ---------------branch-reset----------- after / ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x # 1 2 2 3 2 3 4 =begin original Be careful when using the branch reset pattern in combination with named captures. Named captures are implemented as being aliases to numbered groups holding the captures, and that interferes with the implementation of the branch reset pattern. If you are using named captures in a branch reset pattern, it's best to use the same names, in the same order, in each of the alternations: =end original 名前付き捕捉と枝リセットパターンを組み合わせて使うときには注意してください。 名前付き捕捉は捕捉を保持している番号付きグループへの別名として 実装されていて、枝リセットパターンの実装を妨害します。 枝リセットパターンで名前付き捕捉を使うときは、それぞれの代替で 同じ名前を同じ順番で使うのが最良です: /(?| (? x ) (? y ) | (? z ) (? w )) /x =begin original Not doing so may lead to surprises: =end original そうしないと驚くことになります: "12" =~ /(?| (? \d+ ) | (? \D+))/x; say $+ {a}; # Prints '12' say $+ {b}; # *Also* prints '12'. =begin original The problem here is that both the group named C<< a >> and the group named C<< b >> are aliases for the group belonging to C<< $1 >>. =end original ここでの問題は、C<< a >> という名前のグループと C<< b >> という名前の が両方ともグループ C<< $1 >> への別名であることです。 =item Look-Around Assertions X X X X =begin original Look-around assertions are zero-width patterns which match a specific pattern without including it in C<$&>. Positive assertions match when their subpattern matches, negative assertions match when their subpattern fails. Look-behind matches text up to the current match position, look-ahead matches text following the current match position. =end original 先読み及び後読みの言明(assertion)は C<$&> の中に 含めない特定のパターンにマッチングするゼロ幅のパターンです。 正の言明はその部分パターンがマッチングしたときにマッチングし、 負の言明はその部分パターンが失敗したときにマッチングします。 後読みのマッチングは今のマッチング位置までのテキストにマッチングし、 先読みの言明は今のマッチング位置の先にあるテキストにマッチングします。 =over 4 =item C<(?=pattern)> X<(?=)> X
, C 修飾子は有効にできるのみで、無効にはできない点、 そして C, C, C, C 修飾子は互いに排他であるという点で特別です: 一つを指定すると他のものの指定を解除し、構文中に最大で一つ (または二つの C) だけが現れます。 従って 例えば C<(?-p)> は C の下でコンパイルされると 警告を発します; C<(?-d:...)> と C<(?dl:...)> は致命的エラーです。 =begin original Note also that the C modifier is special in that its presence anywhere in a pattern has a global effect. =end original パターン中のどこにあってもグローバルな影響があるという意味で C 修飾子が特別であることにも注意してください。 =item C<(?:pattern)> X<(?:)> =item C<(?adluimsx-imsx:pattern)> =item C<(?^aluimsx:pattern)> X<(?^:)> =begin original This is for clustering, not capturing; it groups subexpressions like "()", but doesn't make backreferences as "()" does. So =end original これはキャプチャではなくクラスタです; これは "()" のように部分式を グループ化しますが "()" が行うような後方参照は行いません。 つまり、 @fields = split(/\b(?:a|b|c)\b/) =begin original is like =end original は次と同様ですが @fields = split(/\b(a|b|c)\b/) =begin original but doesn't spit out extra fields. It's also cheaper not to capture characters if you don't need to. =end original 余計なフィールドを引き出しません。 また不要であれば文字のキャプチャを行わないため低コストです。 =begin original Any letters between C> and C<:> act as flags modifiers as with C<(?adluimsx-imsx)>. For example, =end original C> 及び C<:> の間の文字は C<(?adluimsx-imsx)> のようなフラグ修飾子として 動作します。 例えば、 /(?s-i:more.*than).*million/i =begin original is equivalent to the more verbose =end original はより冗長に書けば以下と等価です /(?:(?s-i)more.*than).*million/i =begin original Starting in Perl 5.14, a C<"^"> (caret or circumflex accent) immediately after the C<"?"> is a shorthand equivalent to C. Any positive flags (except C<"d">) may follow the caret, so =end original Perl 5.14から、C<"^">(キャレットか曲折アクセント)がC<"?">のすぐ 後ろにつくと、Cと同じになります。 どのような肯定のフラグ(C<"d">以外の)もキャレットに続けることができます; そのため、 (?^x:foo) =begin original is equivalent to =end original は、以下と同じになります。 (?x-ims:foo) =begin original The caret tells Perl that this cluster doesn't inherit the flags of any surrounding pattern, but uses the system defaults (C), modified by any flags specified. =end original キャレットは、Perlにこのクラスターはパターンの周りのどのフラグも 引き継がずに、代わりに、システムのデフォルトのフラグ(C) を使うことを教えます; 指定されている他のフラグによって変更されます。 =begin original The caret allows for simpler stringification of compiled regular expressions. These look like =end original キャレットはより簡単なコンパイルされた正規表現の文字列化をすることが できます。次のものは (?^:pattern) =begin original with any non-default flags appearing between the caret and the colon. A test that looks at such stringification thus doesn't need to have the system default flags hard-coded in it, just the caret. If new flags are added to Perl, the meaning of the caret's expansion will change to include the default for those flags, so the test will still work, unchanged. =end original キャレットとコロンの間には、デフォルトでないフラグがありません。 このような文字列化を見るテストには、したがって、システムのデフォルトのフラグを その中にハードコードする必要はなく、ただキャレットを使います。新しいフラグが Perlに追加されたら、キャレットを展開した意味はそれらのフラグのためのデフォルトを 含むように変更されます; そのために、このテストは、それでも何も変えずに 動くでしょう。 =begin original Specifying a negative flag after the caret is an error, as the flag is redundant. =end original キャレットの後ろに否定のフラグを付けると、余計なフラグであるとして、 エラーになります。 =begin original Mnemonic for C<(?^...)>: A fresh beginning since the usual use of a caret is to match at the beginning. =end original C<(?^...)>の覚え方: 新鮮な開始; 通常のキャレットの使い方は文字列の開始の マッチなので。 =item C<(?|pattern)> X<(?|)> X =begin original This is the "branch reset" pattern, which has the special property that the capture groups are numbered from the same starting point in each alternation branch. It is available starting from perl 5.10.0. =end original これは各代替分岐において捕捉グループを同じ番号から始める特殊な 属性を持っている、「ブランチリセット(branch reset)」パターンです。 これは perl 5.10.0 から提供されています。 =begin original Capture groups are numbered from left to right, but inside this construct the numbering is restarted for each branch. =end original 捕捉グループは左から右へと番号が振られますが、この構成子の内側では 各分岐毎に番号はリセットされます。 =begin original The numbering within each branch will be as normal, and any groups following this construct will be numbered as though the construct contained only one branch, that being the one with the most capture groups in it. =end original 各分岐内での番号付けは通常通りに行われ、この構成子の後に続くグループは その中で捕捉グループが一番多かった分岐のみが 格納されていたかのように番号付けされていきます。 =begin original This construct is useful when you want to capture one of a number of alternative matches. =end original この構成子はいくつかの代替マッチングの1つを捕捉したいときに便利です。 =begin original Consider the following pattern. The numbers underneath show in which group the captured content will be stored. =end original 以下のパターンを想像してみてください。 下側の番号は内容の格納されるグループを示します。 # before ---------------branch-reset----------- after / ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x # 1 2 2 3 2 3 4 =begin original Be careful when using the branch reset pattern in combination with named captures. Named captures are implemented as being aliases to numbered groups holding the captures, and that interferes with the implementation of the branch reset pattern. If you are using named captures in a branch reset pattern, it's best to use the same names, in the same order, in each of the alternations: =end original 名前付き捕捉と枝リセットパターンを組み合わせて使うときには注意してください。 名前付き捕捉は捕捉を保持している番号付きグループへの別名として 実装されていて、枝リセットパターンの実装を妨害します。 枝リセットパターンで名前付き捕捉を使うときは、それぞれの代替で 同じ名前を同じ順番で使うのが最良です: /(?| (? x ) (? y ) | (? z ) (? w )) /x =begin original Not doing so may lead to surprises: =end original そうしないと驚くことになります: "12" =~ /(?| (? \d+ ) | (? \D+))/x; say $+ {a}; # Prints '12' say $+ {b}; # *Also* prints '12'. =begin original The problem here is that both the group named C<< a >> and the group named C<< b >> are aliases for the group belonging to C<< $1 >>. =end original ここでの問題は、C<< a >> という名前のグループと C<< b >> という名前の が両方ともグループ C<< $1 >> への別名であることです。 =item Look-Around Assertions X X X X =begin original Look-around assertions are zero-width patterns which match a specific pattern without including it in C<$&>. Positive assertions match when their subpattern matches, negative assertions match when their subpattern fails. Look-behind matches text up to the current match position, look-ahead matches text following the current match position. =end original 先読み及び後読みの言明(assertion)は C<$&> の中に 含めない特定のパターンにマッチングするゼロ幅のパターンです。 正の言明はその部分パターンがマッチングしたときにマッチングし、 負の言明はその部分パターンが失敗したときにマッチングします。 後読みのマッチングは今のマッチング位置までのテキストにマッチングし、 先読みの言明は今のマッチング位置の先にあるテキストにマッチングします。 =over 4 =item C<(?=pattern)> X<(?=)> X
modifier is special in that its presence anywhere in a pattern has a global effect. =end original パターン中のどこにあってもグローバルな影響があるという意味で C
修飾子が特別であることにも注意してください。 =item C<(?:pattern)> X<(?:)> =item C<(?adluimsx-imsx:pattern)> =item C<(?^aluimsx:pattern)> X<(?^:)> =begin original This is for clustering, not capturing; it groups subexpressions like "()", but doesn't make backreferences as "()" does. So =end original これはキャプチャではなくクラスタです; これは "()" のように部分式を グループ化しますが "()" が行うような後方参照は行いません。 つまり、 @fields = split(/\b(?:a|b|c)\b/) =begin original is like =end original は次と同様ですが @fields = split(/\b(a|b|c)\b/) =begin original but doesn't spit out extra fields. It's also cheaper not to capture characters if you don't need to. =end original 余計なフィールドを引き出しません。 また不要であれば文字のキャプチャを行わないため低コストです。 =begin original Any letters between C> and C<:> act as flags modifiers as with C<(?adluimsx-imsx)>. For example, =end original C> 及び C<:> の間の文字は C<(?adluimsx-imsx)> のようなフラグ修飾子として 動作します。 例えば、 /(?s-i:more.*than).*million/i =begin original is equivalent to the more verbose =end original はより冗長に書けば以下と等価です /(?:(?s-i)more.*than).*million/i =begin original Starting in Perl 5.14, a C<"^"> (caret or circumflex accent) immediately after the C<"?"> is a shorthand equivalent to C. Any positive flags (except C<"d">) may follow the caret, so =end original Perl 5.14から、C<"^">(キャレットか曲折アクセント)がC<"?">のすぐ 後ろにつくと、Cと同じになります。 どのような肯定のフラグ(C<"d">以外の)もキャレットに続けることができます; そのため、 (?^x:foo) =begin original is equivalent to =end original は、以下と同じになります。 (?x-ims:foo) =begin original The caret tells Perl that this cluster doesn't inherit the flags of any surrounding pattern, but uses the system defaults (C), modified by any flags specified. =end original キャレットは、Perlにこのクラスターはパターンの周りのどのフラグも 引き継がずに、代わりに、システムのデフォルトのフラグ(C) を使うことを教えます; 指定されている他のフラグによって変更されます。 =begin original The caret allows for simpler stringification of compiled regular expressions. These look like =end original キャレットはより簡単なコンパイルされた正規表現の文字列化をすることが できます。次のものは (?^:pattern) =begin original with any non-default flags appearing between the caret and the colon. A test that looks at such stringification thus doesn't need to have the system default flags hard-coded in it, just the caret. If new flags are added to Perl, the meaning of the caret's expansion will change to include the default for those flags, so the test will still work, unchanged. =end original キャレットとコロンの間には、デフォルトでないフラグがありません。 このような文字列化を見るテストには、したがって、システムのデフォルトのフラグを その中にハードコードする必要はなく、ただキャレットを使います。新しいフラグが Perlに追加されたら、キャレットを展開した意味はそれらのフラグのためのデフォルトを 含むように変更されます; そのために、このテストは、それでも何も変えずに 動くでしょう。 =begin original Specifying a negative flag after the caret is an error, as the flag is redundant. =end original キャレットの後ろに否定のフラグを付けると、余計なフラグであるとして、 エラーになります。 =begin original Mnemonic for C<(?^...)>: A fresh beginning since the usual use of a caret is to match at the beginning. =end original C<(?^...)>の覚え方: 新鮮な開始; 通常のキャレットの使い方は文字列の開始の マッチなので。 =item C<(?|pattern)> X<(?|)> X =begin original This is the "branch reset" pattern, which has the special property that the capture groups are numbered from the same starting point in each alternation branch. It is available starting from perl 5.10.0. =end original これは各代替分岐において捕捉グループを同じ番号から始める特殊な 属性を持っている、「ブランチリセット(branch reset)」パターンです。 これは perl 5.10.0 から提供されています。 =begin original Capture groups are numbered from left to right, but inside this construct the numbering is restarted for each branch. =end original 捕捉グループは左から右へと番号が振られますが、この構成子の内側では 各分岐毎に番号はリセットされます。 =begin original The numbering within each branch will be as normal, and any groups following this construct will be numbered as though the construct contained only one branch, that being the one with the most capture groups in it. =end original 各分岐内での番号付けは通常通りに行われ、この構成子の後に続くグループは その中で捕捉グループが一番多かった分岐のみが 格納されていたかのように番号付けされていきます。 =begin original This construct is useful when you want to capture one of a number of alternative matches. =end original この構成子はいくつかの代替マッチングの1つを捕捉したいときに便利です。 =begin original Consider the following pattern. The numbers underneath show in which group the captured content will be stored. =end original 以下のパターンを想像してみてください。 下側の番号は内容の格納されるグループを示します。 # before ---------------branch-reset----------- after / ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x # 1 2 2 3 2 3 4 =begin original Be careful when using the branch reset pattern in combination with named captures. Named captures are implemented as being aliases to numbered groups holding the captures, and that interferes with the implementation of the branch reset pattern. If you are using named captures in a branch reset pattern, it's best to use the same names, in the same order, in each of the alternations: =end original 名前付き捕捉と枝リセットパターンを組み合わせて使うときには注意してください。 名前付き捕捉は捕捉を保持している番号付きグループへの別名として 実装されていて、枝リセットパターンの実装を妨害します。 枝リセットパターンで名前付き捕捉を使うときは、それぞれの代替で 同じ名前を同じ順番で使うのが最良です: /(?| (? x ) (? y ) | (? z ) (? w )) /x =begin original Not doing so may lead to surprises: =end original そうしないと驚くことになります: "12" =~ /(?| (? \d+ ) | (? \D+))/x; say $+ {a}; # Prints '12' say $+ {b}; # *Also* prints '12'. =begin original The problem here is that both the group named C<< a >> and the group named C<< b >> are aliases for the group belonging to C<< $1 >>. =end original ここでの問題は、C<< a >> という名前のグループと C<< b >> という名前の が両方ともグループ C<< $1 >> への別名であることです。 =item Look-Around Assertions X X X X =begin original Look-around assertions are zero-width patterns which match a specific pattern without including it in C<$&>. Positive assertions match when their subpattern matches, negative assertions match when their subpattern fails. Look-behind matches text up to the current match position, look-ahead matches text following the current match position. =end original 先読み及び後読みの言明(assertion)は C<$&> の中に 含めない特定のパターンにマッチングするゼロ幅のパターンです。 正の言明はその部分パターンがマッチングしたときにマッチングし、 負の言明はその部分パターンが失敗したときにマッチングします。 後読みのマッチングは今のマッチング位置までのテキストにマッチングし、 先読みの言明は今のマッチング位置の先にあるテキストにマッチングします。 =over 4 =item C<(?=pattern)> X<(?=)> X