=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 the string to matching the start or end of any
line 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 an inverted bracketed
character class, which otherwise could be highly confusing. See
L.
=end original
Perl は、否定大かっこ文字クラスの複数の文字にはマッチングしません;
さもなければとても混乱することがあるからです。
L を参照して下さい。
=begin original
Another bug involves character classes that match both a sequence of
multiple characters, and an initial sub-string of that sequence. For
example,
=end original
もう一つのバグは、複数文字の並びと、並びの最初の部分文字列の両方に
マッチングする文字クラスによるものです。
例えば:
/[s\xDF]/i
=begin original
should match both a single and a double "s", since C<\xDF> (on ASCII
platforms) matches "ss". However, this bug
(L<[perl #89774]|https://rt.perl.org/rt3/Ticket/Display.html?id=89774>)
causes it to only match a single "s", even if the final larger match
fails, and matching the double "ss" would have succeeded.
=end original
これは "s" 一つと二つの両方にマッチングします; なぜなら
(ASCII プラットフォームでの) C<\xDF> は "ss" にマッチングするからです。
しかし、このバグ
(L<[perl #89774]|https://rt.perl.org/rt3/Ticket/Display.html?id=89774>) は
例え最後のより大きいマッチングが失敗し、"ss" が成功しても、
単一の "s2 にのみマッチングするようになります。
=begin original
Also, Perl matching doesn't fully conform to the current Unicode C
recommendations, which ask that the matching be made upon the NFD
(Normalization Form Decomposed) of the text. However, Unicode is
in the process of reconsidering and revising their recommendations.
=end original
また、Perl のマッチングは現在の Unicode の C 勧告に完全には
準拠していません; テキストの NFD (Normalization Form Decomposed) に対しての
マッチングに関する部分です。
しかし、Unicode は勧告の再検討と改訂の作業中です。
=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
X X
=begin original
Preserve the string matched such that ${^PREMATCH}, ${^MATCH}, and
${^POSTMATCH} are available for use after matching.
=end original
${^PREMATCH}, ${^MATCH}, ${^POSTMATCH} といったマッチングされた文字列を
マッチングの後も使えるように維持します。
=item g and c
X X
(g と c)
=begin original
Global matching, and keep the Current position after failed matching.
Unlike i, m, s and x, these two flags affect the way the regex is used
rather than the regex itself. See
L for further explanation
of the g and c modifiers.
=end original
グローバル(Global)なマッチング、及びマッチング失敗後の現在位置の保持。
i, m, s, x とは違い、この二つのフラグは
正規表現そのものではなく正規表現の使われ方に作用します。
g 及び c 修飾子の詳細な説明は
L を参照してください。
=item a, d, l and u
X X X X
(a, d, l, u)
=begin original
These modifiers, all new in 5.14, affect which character-set semantics
(Unicode, etc.) are used, as described below in
L.
=end original
5.14 から導入されたこれらの新しい修飾子は、どの文字集合意味論
(Unicode など) が使われるかに影響を与えます;
L で後述します。
=back
=begin original
Regular expression modifiers are usually written in documentation
as e.g., "the C modifier", even though the delimiter
in question might not really be a slash. The modifiers C
may also be embedded within the regular expression itself using
the C<(?...)> construct, see L below.
=end original
正規表現修飾子は文書中では通常「C 修飾子」のように記述され、
これは区切りが実際にはスラッシュでなくてもそう記述されます。
また、C 修飾子は C<(?...)> 構築子を使って正規表現内に
埋め込まれることもあります; 後述する L を
参照してください。
=head3 /x
=begin original
C tells
the regular expression parser to ignore most whitespace that is neither
backslashed nor within a character class. You can use this to break up
your regular expression into (slightly) more readable parts. The C<#>
character is also treated as a metacharacter introducing a comment,
just as in ordinary Perl code. This also means that if you want real
whitespace or C<#> characters in the pattern (outside a character
class, where they are unaffected by C), then you'll either have to
escape them (using backslashes or C<\Q...\E>) or encode them using octal,
hex, or C<\N{}> escapes. Taken together, these features go a long way towards
making Perl's regular expressions more readable. Note that you have to
be careful not to include the pattern delimiter in the comment--perl has
no way of knowing you did not intend to close the pattern early. See
the C-comment deletion code in L. Also note that anything inside
a C<\Q...\E> stays unaffected by C. And note that C doesn't affect
space interpretation within a single multi-character construct. For
example in C<\x{...}>, regardless of the C modifier, there can be no
spaces. Same for a L such as C<{3}> or
C<{5,}>. Similarly, C<(?:...)> can't have a space between the C> and C<:>,
but can between the C<(> and C>. Within any delimiters for such a
construct, allowed spaces are not affected by C, and depend on the
construct. For example, C<\x{...}> can't have spaces because hexadecimal
numbers don't have spaces in them. But, Unicode properties can have spaces, so
in C<\p{...}> there can be spaces that follow the Unicode rules, for which see
L.
X
=end original
C は、バックスラッシュでエスケープされたり文字クラスの中だったりしない
ほとんどの空白を無視するように正規表現パーサに伝えます。
これは正規表現を(少し)読みやすく部分に分割するために使えます。
また、C<#> は通常の Perl コードと同様コメントを開始するメタ文字として
扱われます。
これはまた、(C の影響を受けない文字クラス内以外で)パターン中に本当の空白や
C<#> 文字を使いたい場合は、(逆スラッシュや C<\Q...\E> を使って)
エスケープするか、8 進数、16 進数、C<\N{}> エスケープのいずれかで
エンコードする必要があると言うことです。
まとめると、これらの機能は Perl の正規表現をより読みやすくするために
大きく役立ちます。
コメントにパターン区切りを含まないように注意する必要があります--perl は
早くパターンを終了したいわけではないと言うことを知る手段がありません。
L の C 型式のコメントを削除するコードを参照してください。
また、C<\Q...\E> の内側のものは C の影響を受けないことにも
注意してください。
例えば、C<\x{...}> の内部では、C 修飾子に関わらず、スペースを
含むことはできません。
C<{3}> や C<{5,}> のような L<量指定子|/Quantifiers> も同様です。
また、C<(?:...)> も C> と C<:> の間にスペースを含むことはできませんが、
C<(> と C> の間には含むことができます。
このような構文の区切り文字の中では、スペースが許されるかどうかは
C に影響されず、構文自身に影響されます。
例えば、16 進数はスペースを含むことができないので C<\x{...}> はスペースを
含むことができません。
しかし、Unicode 特性はスペースを含むことができるので、
C<\p{...}> は Unicode の規則に従ってスペースを含むことができます;
L を
参照してください。
X
=head3 Character set modifiers
(文字集合修飾子)
=begin original
C, C, C, and C, available starting in 5.14, are called
the character set modifiers; they affect the character set semantics
used for the regular expression.
=end original
5.14 から利用可能な C, C, C, C は文字集合修飾子と呼ばれます;
これらは正規表現で使われる文字集合の意味論に影響を与えます。
=begin original
The C, C, and C modifiers are not likely to be of much use
to you, and so you need not worry about them very much. They exist for
Perl's internal use, so that complex regular expression data structures
can be automatically serialized and later exactly reconstituted,
including all their nuances. But, since Perl can't keep a secret, and
there may be rare instances where they are useful, they are documented
here.
=end original
C, C, C 修飾子はよく使うことはないだろうものなので、
これらについてあまり心配する必要はありません。
これらは Perl の内部仕様のために存在しているので、
複雑な正規表現データ構造は自動的に直列化されて、その後全てのニュアンスを
含めて正確に再構成されます。
=begin original
The C modifier, on the other hand, may be useful. Its purpose is to
allow code that is to work mostly on ASCII data to not have to concern
itself with Unicode.
=end original
一方、C 修飾子は有用かもしれません。
この目的は、Unicode に関して考慮する必要がないように、コードを
ほとんど ASCII データとして動作するようにすることです。
=begin original
Briefly, C sets the character set to that of whatever Bocale is in
effect at the time of the execution of the pattern match.
=end original
簡単に言うと、C は、文字集合をパターンマッチングの実行時に有効な
ロケール(Bocale)に設定します。
=begin original
C sets the character set to Bnicode.
=end original
C は文字集合を Bnicode に設定します。
=begin original
C also sets the character set to Unicode, BUT adds several
restrictions for BSCII-safe matching.
=end original
C も文字コードを Unicode に設定しますが、
BSCII セーフなマッチングのためにいくつかの制限を加えます。
=begin original
C is the old, problematic, pre-5.14 Befault character set
behavior. Its only use is to force that old behavior.
=end original
C は古くて問題のある、5.14 以前のデフォルト(Befault)文字集合の
振る舞いです。
これは古い振る舞いを強制するためだけに使います。
=begin original
At any given time, exactly one of these modifiers is in effect. Their
existence allows Perl to keep the originally compiled behavior of a
regular expression, regardless of what rules are in effect when it is
actually executed. And if it is interpolated into a larger regex, the
original's rules continue to apply to it, and only it.
=end original
任意のある瞬間において、これらの修飾子の内正確に一つだけが有効になります。
これにより、
それが実際に実行されるときにどの規則が有効かに関わらず、
Perl が元々コンパイルされた正規表現の振る舞いを保存できるようにします。
そしてそれがより大きな正規表現に展開された場合、元の規則だけが
適用され続けます。
=begin original
The C and C modifiers are automatically selected for
regular expressions compiled within the scope of various pragmas,
and we recommend that in general, you use those pragmas instead of
specifying these modifiers explicitly. For one thing, the modifiers
affect only pattern matching, and do not extend to even any replacement
done, whereas using the pragmas give consistent results for all
appropriate operations within their scopes. For example,
=end original
C と C の修飾子は、様々なプラグマのスコープ内でコンパイルされた
正規表現で自動的に選択されます;
一般的にはこれらの修飾子を明示的に使うのではなく、これらのプラグマを
使うことを勧めます。
一例を挙げると、修飾子はパターンマッチングに対してのみ影響を与え、
置換には拡張されないことに注意してください;
いっぽうプラグマを使うと、そのスコープ内の全ての適切な操作について
一貫した結果となります。
例えば:
s/foo/\Ubar/il
=begin original
will match "foo" using the locale's rules for case-insensitive matching,
but the C does not affect how the C<\U> operates. Most likely you
want both of them to use locale rules. To do this, instead compile the
regular expression within the scope of C