perlrequick - Perl regular expressions quick start. We can match different character strings with the alternation metacharacter '|'. If the empty regex // is used, the string is split into individual characters. この文で、World は正規表現であり、 // で囲まれた /World/ は Perl に対してマッチングのために文字列を検索することを指示します。 =~ という演算子は正規表現にマッチングする文字列に結び付けられ、 正規表現がマッチングすれば真の値を生成し、マッチングしなければ偽となります。 この例では、World は "Hello World" の二番目の単語にマッチングするので、 式は真となります。 この考え方にはいくつかのバリエーションがあります。. The quantifier metacharacters ?, *, +, and {} allow us to determine the number of repeats of a portion of a regex we consider to be a match. や s{}{} 、 果ては s{}// のように異なるデリミタを使うことができます。 s''' のようにシングルクォートが使われた場合、その正規表現と 置換テキストはシングルクォート文字列のように扱われ、変数の置き換えは 行われません。, split /regex/, string splits string into a list of substrings and returns that list. You can get or set the position with the pos() function. 最後の例のように、s/// も s!!! The \d\s\w\D\S\W abbreviations can be used both inside and outside of character classes. * has no string left to it, so it matches 0 times. The operator =~ associates the string with the regex match and produces a true value if the regex matched, or false if the regex did not match. If the groupings in a regex are nested, $1 gets the group with the leftmost opening parenthesis, $2 the next opening parenthesis, etc. マッチング演算子について知りたいかもしれないことがあといくつかあります。 グローバル修飾子 //g は一つの文字列に出来るだけ何回もマッチングすることを 許します。 スカラコンテキストでは、文字列に対するマッチングの成功によって //g はマッチングからマッチングにジャンプし、文字列の位置を記録し続けて いきます。 pos() 関数を使って位置を取得または設定できます。 例えば: A failed match or changing the target string resets the position. The anchor ^ means match at the beginning of the string and the anchor $ means match at the end of the string, or before a newline at the end of the string. The author would like to thank Mark-Jason Dominus, Tom Christiansen, Ilya Zakharevich, Brad Hughes, and Mike Giroux for all their helpful comments. The special characters for a character class are -]\^$ and are matched using an escape: 文字クラスも普通の文字と特殊文字がありますが、文字クラスの内側での 普通の文字と特殊文字は、文字クラスの外側の物とは違います。 文字クラスのために特殊な文字は -]\^$ で、エスケープを使って マッチングされます: The special character '-' acts as a range operator within character classes, so that the unwieldy [0123456789] and [abc...xyz] become the svelte [0-9] and [a-z]: 特殊文字 '-' は文字クラスの中で範囲演算子として振舞うので、 [0123456789] や [abc...xyz] のような 見づらいものはすっきりとした [0-9] であるとか [a-z] のように 書き換えられます: If '-' is the first or last character in a character class, it is treated as an ordinary character. This document may be distributed under the same terms as Perl itself. If matching against $_, the $_ =~ can be dropped. At each character position, Perl will first try to match the first alternative, dog. The simplest regex is simply a word, or more generally, a string of characters. Some examples: 評価修飾子 s///e は置換文字列を eval{...} でラップし、その評価結果を マッチングした部分文字列の置換のために使います。 いくつか例を挙げます: The last example shows that s/// can use other delimiters, such as s!!! (These definitions are those that Perl uses in ASCII-safe mode with the /a modifier. For a more in-depth tutorial on regexes, see perlretut and for the reference page, see perlre. 最後の正規表現では、スラッシュ '/' もまたバックスラッシュが つけられています; なぜなら、それが正規表現のデリミタとして使われているからです。. To match dog or cat, we form the regex dog|cat. If there is a match, s/// returns the number of substitutions made; otherwise it returns false. Otherwise they could match many more non-ASCII Unicode characters as well. So we have, これらの量指定子はは正規表現のマッチングが成功するのを許す範囲で 可能な限りの文字列をマッチングさせようとします。 従って、以下のようになります. So, リストコンテキストでは、//g はマッチングしたグループのリストを返します; グループ化の指定がなければ、正規表現全体にマッチングするリストを返します。 従って. Common examples are \t for a tab, \n for a newline, and \r for a carriage return. Perlではダブルクオーテーションで囲まれた値は文字列として認識されます。その為、「"5"」と記述した場合は文字列の「5」ですし、単に「5」と記述した場合は数値の「5」となります。 ただPerlにおいては文字列と数値を厳密には区分していません。使用される演算子の種類によって、その演算子に対象となる値を文字列と判別したり数値と判別したりします。 In this statement, World is a regex and the // enclosing /World/ tells Perl to search a string for a match. So we could rewrite it as, リストコンテキストでは、グループ化付きのマッチング /regex/ は マッチングした値のリスト ($1,$2,...) を返します。 従ってこれは以下のように書き換えられます. They have the following meanings: 量指定子 (quatifier) ?, *, +, {} によって、 マッチングさせたいと考えている正規表現の一部分の繰り返し回数を 指定できます。 量指定子は繰り返しを指定したい文字、文字クラス、またはグループの直後に 置きます。 量指定子には以下のような意味があります: a* = match 'a' 0 or more times, i.e., any number of times, a+ = match 'a' 1 or more times, i.e., at least once. 動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。, 初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。. Character classes are denoted by brackets [...], with the set of characters to be possibly matched inside. As before, Perl will try to match the regex at the earliest possible point in the string. The second quantifier . For example. Let'sプログラミング ©2006-2020 Buzzword Inc.. All Rights Reserved. The replacement is a Perl double-quoted string that replaces in the string whatever is matched with the regex. See "Backslash sequences" in perlrecharclass for details. The operator =~ is also used here to associate a string with s///. Both [...] and [^...] must match a character, or the match fails. Parts of a regex are grouped by enclosing them in parentheses. For example, here is a complex regex and the matching variables indicated below it: 正規表現中のグループ化がネストしていた場合、$1 は最も左にある 開きかっこによってグループ化されているものを取り、$2 は 次の開きかっこによるものを取り…となっていきます。 例えば、以下は複雑な正規表現と、後述するマッチング変数です: Associated with the matching variables $1, $2, ... are the backreferences \g1, \g2, ... Backreferences are matching variables that can be used inside a regex: マッチング変数 $1, $2 …に密接に結び付けられたものは、 後方参照 (backreferences) \g1, \g2 …です。 後方参照は正規表現の 内側 で使うことのできるマッチング変数です: $1, $2, ... should only be used outside of a regex, and \g1, \g2, ... only inside a regex. The regex house(cat|keeper) means match house followed by either cat or keeper. To specify where it should match, we would use the anchor metacharacters ^ and $. Quantifiers are put immediately after the character, character class, or grouping that we want to specify. The grouping metacharacters () also allow the extraction of the parts of a string that matched. At a given character position, the first alternative that allows the regex match to succeed will be the one that matches. Here are some examples: 文字クラス は正規表現の特定の場所においてマッチングする可能性のある文字の 集合です(単一の文字ではありません)。 文字クラスはブラケット [...] で表現され、マッチングする可能性のある文字の 集合はその内側に置かれます。 以下はその例です: In the last statement, even though 'c' is the first character in the class, the earliest point at which the regex can match is 'a'. Perl の正規表現のリファレンス. Search and replace is performed using s/regex/replacement/modifiers. 二番目の正規表現において最初の選択肢が dog であるにもかかわらず、 cat が文字列で最初に現れるマッチング対象です。. The metacharacters are, すべての文字がマッチングにおいて'あるがまま'(as is) に使われるのでは ありません。 メタ文字 と呼ばれる幾つかの文字が正規表現の記述に使うために 予約されています。 メタ文字には以下のものがあります. This page covers the very basics of understanding, creating and using regular expressions ('regexes') in Perl. With the global modifier, s///g will search and replace all occurrences of the regex in the string: s/// 演算子を使うにあたって、$1, $2 といったマッチング変数は その置換式のなかで即座に使うことができます。 グローバル修飾子 s///g を使うことで、文字列中のすべての正規表現に マッチングする検索と置換を行います: The non-destructive modifier s///r causes the result of the substitution to be returned instead of modifying $_ (or whatever variable the substitute was bound to with =~): 非破壊修飾子 s///r は $_ (または =~ によって置換されることになる 変数) を変更する代わりに、置換の結果を返します: The evaluation modifier s///e wraps an eval{...} around the replacement string and the evaluated result is substituted for the matched substring. Expressions like this are useful in conditionals: The sense of the match can be reversed by using !~ operator: The literal string in the regex can be replaced by a variable: If you're matching against $_, the $_ =~ part can be omitted: Finally, the // default delimiters for a match can be changed to arbitrary delimiters by putting an 'm' out front: 最後に、マッチングのための // のデフォルトデリミタは 'm' を 前置することにより任意のものにすることができます: Regexes must match a part of the string exactly in order for the statement to be true: 正規表現は、文が真となるためには 正確に 順序通りに文字列の 一部としてマッチングしなければなりません。. a{n,m} = match at least n times, but not more than m times. * には文字列が残されていないので、0 回 マッチングします。. Some examples: 異なる文字列を 選択 メタ文字 '|' によって行えます。 dog または cat にマッチングさせるには、正規表現を dog|cat のようにします。 以前述べた通り、Perlは文字列の可能な限り最も早い位置でマッチングを 行おうとします。 それぞれの文字位置で、Perlはまずはじめに最初の選択である dog に マッチングさせることを試みます。 もし dog がマッチングしなければ、Perl は次の選択肢である cat を 試します。 cat もまたマッチングしなければ、マッチングは失敗してPerlは文字列の 次の位置に移動します。 幾つか例を挙げましょう: Even though dog is the first alternative in the second regex, cat is able to match earlier in the string. A metacharacter can be matched by putting a backslash before it: In the last regex, the forward slash '/' is also backslashed, because it is used to delimit the regex. Perl で文字列検索を行うには index または rindex を利用する。index は文字列を先頭から検索するのに対して、rindexは文字列を後尾から検索する。両者ともに 2 つの引数を受け取る。1 番目の引数には検索対象の文字列を、2 番目の引数に検索したい文字列を与える。検索がヒットすれば、その位置番号が返される。検索がヒットしなかった場合は、-1 を返す。 マッチングに失敗したり、ターゲット文字列を変更するとこの位置は リセットされます。 もしマッチングに失敗したときに位置をリセットしたくないのであれば、 /regexp/gc のように //c を追加します。, In list context, //g returns a list of matched groupings, or if there are no groupings, a list of matches to the whole regex. Perl 正規表現のクイックスタート. ), Perl は一般的な文字クラスの略記法を持っています。 (これらの定義は Perl が /a 修飾子によって ASCII 安全モードを 使っているときのものです。 さもなければもっと多くの非 ASCII の Unicode 文字に マッチングするかもしれません。 詳しくは "Backslash sequences" in perlrecharclass を参照してください。), \s is a whitespace character and represents, \w is a word character (alphanumeric or _) and represents, \D is a negated \d; it represents any character but a digit, \S is a negated \s; it represents any non-whitespace character, \W is a negated \w; it represents any non-word character, The period '.' For each grouping, the part that matched inside goes into the special variables $1, $2, etc. This idea has several variations. There are a few more things you might want to know about matching operators. matches \n i case-Insensitive x eXtended legibility - free whitespace and comments p Preserve a copy of the matched string - ${^PREMATCH}, ${^MATCH}, ${^POSTMATCH} will be defined. A regex consisting of a word matches any string that contains that word: 最も単純な正規表現は単なる単語、より一般的には文字の並びです。 正規表現は単語を構成する任意の文字列にマッチングする単語からなります: In this statement, World is a regex and the // enclosing /World/ tells Perl to search a string for a match. m Multiline mode - ^ and $ match internal lines s match as a Single line - . * grabs as much of the string as possible while still having the regex match. are immediately available for use in the replacement expression. In our case, World matches the second word in "Hello World", so the expression is true. and s{}{}, and even s{}//. $1, $2 …は正規表現の外側のみで用い、 後方参照 \1, \2 …は正規表現の内側でのみ使うようにすべきです。.