=encoding euc-jp
=head1 NAME
X, C, C
=end original この問題に対するもう一つの解決策として、Perl 5.10.0 からは C<$`>, C<$&>, C<$'> と 等価だけれども C
(preseve) 修飾子を伴って実行されたマッチングが 成功した後でのみ定義されることが保証される C<${^PREMATCH}>、 C<${^MATCH}> 及び C<${^POSTMATCH}> を導入しました。 これらの変数の使用は利用したいときに perl に伝える必要がある代わりに、 等価な記号変数とは違い全体的なパフォーマンスの低下を引き起こしません。 Perl 5.20 からこれら三つの変数は C<$`>, C<$&>, C<$'> と等価となり、 C は無視されます。 X X
=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 C<\\>, C<\(>, C<\)>, C<\[>, C<\]>, C<\{>, or C<\}> 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> のように英数字です。
他の正規表現言語とは異なり、英数字でない逆スラッシュ付きシンボルは
ありません。
なので C<\\>, C<\(>, C<\)>, C<\[>, C<\]>, C<\{>, or C<\}> といったものは
全てメタ文字ではなくリテラル文字です。
これはパターンで使いたい文字列の中で正規表現のメタ文字としての特殊な意味を
無効化またはクォートするための一般的な指標として使われてきました。
「単語」でない全ての文字は単にクォートします:
$pattern =~ s/(\W)/\\$1/g;
=begin original
(If C , and C modifiers are special in
that they can only be enabled, not disabled, and the C, C , C 修飾子は有効にできるのみで、無効にはできない点、
そして C, 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<(?adluimnsx-imnsx:pattern)>
=item C<(?^aluimnsx:pattern)>
X<(?^:)>
=begin original
This is for clustering, not capturing; it groups subexpressions like
C<"()">, but doesn't make backreferences as C<"()"> does. So
=end original
これはキャプチャではなくクラスタです; これは C<"()"> のように部分式を
グループ化しますが C<"()"> が行うような後方参照は行いません。
つまり、
@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<(?adluimnsx-imnsx)>. For example,
=end original
C<"?"> 及び C<":"> の間の文字は C<(?adluimnsx-imnsx)> のような
フラグ修飾子として動作します。
例えば、
/(?s-i:more.*than).*million/i
=begin original
is equivalent to the more verbose
=end original
はより冗長に書けば以下と等価です
/(?:(?s-i)more.*than).*million/i
=begin original
Note that any C<()> constructs enclosed within this one will still
capture unless the C modifier is in effect.
=end original
これの中の C<()> 構文は、C が有効でない限りまだ捕捉することに
注意してください。
=begin original
Starting in Perl 5.14, a C<"^"> (caret or circumflex accent) immediately
after the C<"?"> is a shorthand equivalent to C
is put into the special variable C<$^R>. This happens immediately, so
C<$^R> can be used from other C<(?{ code })> assertions inside the same
regular expression.
=end original
スイッチとして使われるかもしれません。
この方法で使われI<なかった>のなら、C
の評価結果は特殊変数 C<$^R> に
おかれます。
これはすぐに行われるので C<$^R> は同じ正規表現内の他の C{ code })>
アサーションで使うことができます。
=begin original
The assignment to C<$^R> above is properly localized, so the old
value of C<$^R> is restored if the assertion is backtracked; compare
L<"Backtracking">.
=end original
この C<$^R> への設定は適切にlocal化されるため、C<$^R> の古い値は
バックトラックしたときには復元されます; L<"Backtracking"> を
見てください。
=begin original
Note that the special variable C<$^N> is particularly useful with code
blocks to capture the results of submatches in variables without having to
keep track of the number of nested parentheses. For example:
=end original
特殊変数 C<$^N> は、一緒にネストしたかっこの数を数えずに一つ前の
マッチング結果を捕捉するコードブロックで特に有用です。
例えば:
$_ = "The brown fox jumps over the lazy dog";
/the (\S+)(?{ $color = $^N }) (\S+)(?{ $animal = $^N })/i;
print "color = $color, animal = $animal\n";
=item C<(??{ code })>
X<(??{})>
X