## Tcl9.0.3/Tk9.0.3 Documentation > Tcl Commands > re_syntax

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    re_syntax — Tcl 正規表現の構文 Syntax of Tcl regular expressions
  説明 DESCRIPTION
  種々の正規表現 DIFFERENT FLAVORS OF REs
  正規表現構文 REGULAR EXPRESSION SYNTAX
  量修飾子 QUANTIFIERS
    *
    +
    ?
    {m}
    {m,}
    {m,n}
    *? +? ?? {m}? {m,}? {m,n}?
  基本子 ATOMS
    (re)
    (?:re)
    ()
    (?:)
    [chars]
    .
    \k
    \c
    {
    x
  拘束子 CONSTRAINTS
    ^
    $
    (?=re)
    (?!re)
  BRACKET EXPRESSIONS
  文字級位 CHARACTER CLASSES
    alpha
    upper
    lower
    digit
    xdigit
    alnum
    print
    blank
    space
    punct
    graph
    cntrl
  角括弧拘束表現 BRACKETED CONSTRAINTS
  照合要素 COLLATING ELEMENTS
  等価級位 EQUIVALENCE CLASSES
  ESCAPES
  文字-見出し 除外 CHARACTER-ENTRY ESCAPES
    \a
    \b
    \B
    \c X
    \e
    \f
    \n
    \r
    \t
    \u wxyz
    \U stuvwxyz
    \v
    \x hh
    \0
    \xyz
    \xy
  級位-簡略表記 除外 CLASS-SHORTHAND ESCAPES
    \d
    \s
    \w
    \D
    \S
    \W
  拘束除外 CONSTRAINT ESCAPES
    \A
    \m
    \M
    \y
    \Y
    \Z
    \m
    \mnn
  後方参照 BACK REFERENCES
  METASYNTAX
    b
    c
    e
    i
    m
    n
    p
    q
    s
    t
    w
    x
  MATCHING
  限界と互換性 LIMITS AND COMPATIBILITY
  基本正規表現 BASIC REGULAR EXPRESSIONS
  SEE ALSO
  KEYWORDS

### NAME

re_syntax — Tcl 正規表現の構文 Syntax of Tcl regular expressions

### 説明 DESCRIPTION

正規表現は､文字記号の文字列を記述する｡特定の文字列に合致し､それ以外には合致しない紋様である｡ A regular expression describes strings of characters. It's a pattern that matches certain strings and does not match others.

### 種々の正規表現 DIFFERENT FLAVORS OF REs

POSIX によって定義されている様に正規表現 (“RE”s) は二つの種類に到達する:拡張正規表現 (“ERE”s) と基本正規表現 (“BRE”s) ｡拡張正規表現は大雑把には伝統的な egrep の類で､基本正規表現は大雑把には伝統的な ed の類である｡ここでの実装には､第３の種類を追加した､高級正規表現 (“ARE”s) ､基本的に重要な拡張を伴った拡張正規表現である｡ Regular expressions (“RE”s), as defined by POSIX, come in two flavors: extended REs (“ERE”s) and basic REs (“BRE”s). EREs are roughly those of the traditional egrep, while BREs are roughly those of the traditional ed. This implementation adds a third flavor, advanced REs (“ARE”s), basically EREs with some significant extensions.

この取扱説明書の頁では､主として高級正規表現を記述する｡基本正規表現は主として､幾つかの古い算譜との互換性の為に存在する; それについては､項の末尾で論議する｡ POSIX の拡張正規表現は殆ど正確に高級正規表現の部分集合である｡拡張正規表現中に存在しない高級正規表現の特徴は後に指摘する｡ This manual page primarily describes AREs. BREs mostly exist for backward compatibility in some old programs; they will be discussed at the end. POSIX EREs are almost an exact subset of AREs. Features of AREs that are not present in EREs will be indicated.

### 正規表現構文 REGULAR EXPRESSION SYNTAX

Tclの正規表現は､ Henry Spencer 氏 が書いた梱包を使って実現している､それは､1003.2 規格と幾つかの(全部ではないが) Perl5 拡張に基いている(Henry さんに感謝!)｡下の正規表現の記述の多くは､一言一句彼の取扱説明書の模写である｡ Tcl regular expressions are implemented using the package written by Henry Spencer, based on the 1003.2 spec and some (not quite all) of the Perl5 extensions (thanks, Henry!). Much of the description of regular expressions below is copied verbatim from his manual entry.

高級正規表現は “|” で区切られる一つ或はそれ以上の選択肢からなり､何であれ､どれかの選択肢に合致するものに合致する｡ 　 An ARE is one or more branches, separated by “|”, matching anything that matches any of the branches.

選択肢は､零又はそれ以上の､拘束子や数量が定められた基本子が､連繋されている｡それは､第一のものに合致し､それに第二のものに合致するものが続き､更に同様なものが続くものに合致する; 空の選択肢は空文字列に合致する｡ 　　 A branch is zero or more constraints or quantified atoms, concatenated. It matches a match for the first, followed by a match for the second, etc; an empty branch matches the empty string.

#### 量修飾子 QUANTIFIERS

量を修飾された基本子とは､基本子であって､量修飾子が一つ添られてもよい｡量修飾子がないと､一つの基本子に合致する｡量修飾子と､それに量修飾された基本子が合致するのは次の通り: 　 A quantified atom is an atom possibly followed by a single quantifier. Without a quantifier, it matches a single match for the atom. The quantifiers, and what a so-quantified atom matches, are:

*
  基本子に合致する 0 個又はそれ以上の並び 　 a sequence of 0 or more matches of the atom

+
  基本子に合致する 1 個又はそれ以上の並び 　 a sequence of 1 or more matches of the atom

?
  基本子に合致する 0 個か 1 個の並び 　 a sequence of 0 or 1 matches of the atom

{m}
  基本子に合致する厳密に m 個の並び 　 a sequence of exactly m matches of the atom

{m,}
  基本子に合致する m 個あるいはそれ以上の並び 　 a sequence of m or more matches of the atom

{m,n}
  基本子に合致する m 個から n 個(m､n を含む)の並び; m は n を超えてはならない｡ a sequence of m through n (inclusive) matches of the atom; m may not exceed n

*? +? ?? {m}? {m,}? {m,n}?
  非貪欲な量修飾子､これらは幾通りかに合致する可能性があるが､最大個数の合致よりも最小個数が優先される｡(MATCHING の項を参照のこと) non-greedy quantifiers, which match the same possibilities, but prefer the smallest number rather than the largest number of matches (see MATCHING)

{ と } を使う形式は､限界 bound として知られている｡数 m と n は符号なし十進整数で許容される値は､0から255迄で､0も255も許容される｡ The forms using { and } are known as bounds. The numbers m and n are unsigned decimal integers with permissible values from 0 to 255 inclusive.

#### 基本子 ATOMS

基本子は以下の内の一つ: An atom is one of:

(re)
  re に対応するものに合致し(re はどの様な正規表現でもよい)報告可能な様に記された合致を伴う matches a match for re (re is any regular expression) with the match noted for possible reporting

(?:re)
  上述のものと同じ､但し報告なし(括弧による “非捕捉” 群) as previous, but does no reporting (a “non-capturing” set of parentheses)

()
  空文字列に合致､報告可能な様に記された合致を伴う matches an empty string, noted for possible reporting

(?:)
  空文字列に合致､報告なし matches an empty string, without reporting

[chars]
  角括弧の表現､何であれ１つの文字に合致する(更なる詳細は BRACKET EXPRESSIONS を参照のこと) a bracket expression, matching any one of the chars (see BRACKET EXPRESSIONS for more detail)

.
  何であれ､一つの文字に合致する matches any single character

\k
  普通の文字として扱われた非英数字の文字 k に合致する｡譬えば､ \\ は１個の逆斜線記号に合致する matches the non-alphanumeric character k taken as an ordinary character, e.g. \\ matches a backslash character

\c
  c が英数字(他の文字が続くかもしれない)の場合､除外である(高級正規表現のみ)､下の ESCAPES 参照 where c is alphanumeric (possibly followed by other characters), an escape (AREs only), see ESCAPES below

{
  数字以外の文字が後に続く場合､左-波括弧 “{” に合致し; 数字が続く場合､限界 (上を参照) の開始を表す｡ when followed by a character other than a digit, matches the left-brace character “{”; when followed by a digit, it is the beginning of a bound (see above)

x
  x が特別な意義のある文字でなければ､その文字に合致する｡ where x is a single character with no other significance, matches that character.

#### 拘束子 CONSTRAINTS

拘束子は特別な場合空文字列に一致する｡拘束子に量修飾子は付かない｡単純な拘束子は次の通り; それ以上の幾つかは後に､除外( ESCAPES) の項に記述する｡ A constraint matches an empty string when specific conditions are met. A constraint may not be followed by a quantifier. The simple constraints are as follows; some more constraints are described later, under ESCAPES.

^
  文字列か行の先頭に合致 (下の MATCHING に述べられる様に､合致が改行検知か否かに依存する)｡ matches at the beginning of the string or a line (according to whether matching is newline-sensitive or not, as described in MATCHING, below).

$
  文字列か行の末尾に合致 (下の MATCHING に述べられる様に､合致が改行検知か否かに依存する)｡ matches at the end of the string or a line (according to whether matching is newline-sensitive or not, as described in MATCHING, below).

  文字列に改行文字が含まれない場合は合致様式が文字列合致か行合致かの違いは重要ではない｡\A と \Z 拘束除外は同様の目的を有するが常に文字列全体について拘束する｡ The difference between string and line matching modes is immaterial when the string does not contain a newline character. The \A and \Z constraint escapes have a similar purpose but are always constraints for the overall string.

  正規表現を使用する命令に依存する省略時設定の改行検知は下のMETASYNTAXに述べる様に上書きされ得る｡ The default newline-sensitivity depends on the command that uses the regular expression, and can be overridden as described in METASYNTAX, below.

(?=re)
  肯定的な先読み(高級正規表現のみ)､どこであれ､対象文字列が re との合致が始まる位置に合致する positive lookahead (AREs only), matches at any point where a substring matching re begins

(?!re)
  否定的な先読み(高級正規表現のみ)､どこであれ､対象文字列が re との非合致が始まる位置に合致する negative lookahead (AREs only), matches at any point where no substring matching re begins

先読みの拘束子は後ろ向き参照(後方参照)を含まない､又､その中の全ての括弧は非-捕捉と看做される｡ The lookahead constraints may not contain back references (see later), and all parentheses within them are considered non-capturing.

正規表現は “\” では終らない｡ An RE may not end with “\”.

### BRACKET EXPRESSIONS

角括弧表現は “[ ]” に包まれた文字のリストである｡それは､通常は､何であれ､そのリスト内のどれか一文字に合致する(下の例外参照)｡もし､リストが “^” で始まっていたら､何であれ､残りのリスト以外の一文字に合致する(但し下の例外参照)｡ A bracket expression is a list of characters enclosed in “[ ]”. It normally matches any single character from the list (but see below). If the list begins with “^”, it matches any single character (but see below) not from the rest of the list.

リスト内の二つの文字が “-” で隔てられていると､これは､これら二つの間の範囲(両端を含む)の全ての文字の簡略書式であり､譬えば ユニコードの “[0-9]” は如何なる通常の十進数にも合致する｡二つの範囲が端位置を共有することはない､そこで譬えば “a-c-e” は不適切である｡Tcl 内で範囲は常にユニコードの照合並びを使うが､他の算譜では他の照合並びを使うかもしれない､そこで算譜間の非互換性が起りうる｡ If two characters in the list are separated by “-”, this is shorthand for the full range of characters between those two (inclusive) in the collating sequence, e.g. “[0-9]” in Unicode matches any conventional decimal digit. Two ranges may not share an endpoint, so e.g. “a-c-e” is illegal. Ranges in Tcl always use the Unicode collating sequence, but other programs may use other collating sequences and this can be a source of incompatibility between programs.

リスト中に文字 ] や - を含むには､最も簡単な方法はそれを [. と .] で包み､照合要素(下記参照)にすることである｡別法は､それを最初の文字に( “^” があればその次に)する､又は(高級正規表現のみ) “\” を前置する｡別法として､ “-” に関しては､それを最終の文字にする､又は範囲の終端位置の文字にする｡範囲の始まりの文字として - を使うには､それを照合要素にするか､又は(高級正規表現のみ) “\” を前置する｡これらの例外以外では､即ち [ を使うある種の組み合わせ(次の段落を参照されたい)､及び､除外(escapes) 以外では､その他の全ての特殊文字は角括弧表現の中でその特殊な意義を失う｡ To include a literal ] or - in the list, the simplest method is to enclose it in [. and .] to make it a collating element (see below). Alternatively, make it the first character (following a possible “^”), or (AREs only) precede it with “\”. Alternatively, for “-”, make it the last character, or the second endpoint of a range. To use a literal - as the first endpoint of a range, make it a collating element or (AREs only) precede it with “\”. With the exception of these, some combinations using [ (see next paragraphs), and escapes, all other special characters lose their special significance within a bracket expression.

#### 文字級位 CHARACTER CLASSES

角括弧表現内部で､ [: と :] の中に囲まれた文字級位の名前はその級位に属する全ての文字のリストを表す(全ての照合要素ではない!)｡標準の級位は: Within a bracket expression, the name of a character class enclosed in [: and :] stands for the list of all characters (not all collating elements!) belonging to that class. Standard character classes are:

alpha
  文字｡ A letter.

upper
  大文字｡ An upper-case letter.

lower
  小文字｡ A lower-case letter.

digit
  十進数｡ A decimal digit.

xdigit
  十六進数｡ A hexadecimal digit.

alnum
  英数字(文字又は数字)｡ An alphanumeric (letter or digit).

print
  "印刷文字"(可視化表現文字とほぼ同じ､こちらは空白も含む)｡ A "printable" (same as graph, except also including space).

blank
  空白又はタブ文字｡ A space or tab character.

space
  表示される文章中に空白を作り出す文字｡ A character producing white space in displayed text.

punct
  句読点文字｡ A punctuation character.

graph
  可視化表現文字(英数字と句読点の両方を含む)｡ A character with a visible representation (includes both alnum and punct).

cntrl
  制御文字 A control character.

地域化情報はそれ以外をもたらすかもしれない｡文字級位は範囲の端の位置としては使用できない｡ A locale may provide others. A character class may not be used as an endpoint of a range.

  (註意 現在のTcl実装は唯一つの地域化情報のユニコード地域化情報のみを具備し､それは上記級位に正確に対応する) (Note: the current Tcl implementation has only one locale, the Unicode locale, which supports exactly the above classes.)

#### 角括弧拘束表現 BRACKETED CONSTRAINTS

二つの特別な場合の角括弧表現がある: 角括弧表現の “[[:<:]]” と “[[:>:]]” は拘束子であり､それぞれ語の初めと終りの空文字に合致する｡語は語の文字の連続で前にも後にも語の文字がないものと定義される｡語の文字は英数字又は下線 (“_”) である｡これらの特殊な角括弧表現は批判がある; 高級正規表現の使用者は､その代わりに強制除外を使うべきである(後述参照)｡ There are two special cases of bracket expressions: the bracket expressions “[[:<:]]” and “[[:>:]]” are constraints, matching empty strings at the beginning and end of a word respectively. A word is defined as a sequence of word characters that is neither preceded nor followed by word characters. A word character is an alnum character or an underscore (“_”). These special bracket expressions are deprecated; users of AREs should use constraint escapes instead (see below).

#### 照合要素 COLLATING ELEMENTS

角括弧表現内部では､[. と .] に囲まれた､照合要素(一文字､又は恰も一文字の如く照合する複数の文字の並び､又はそれらに付けた照合文字列名)は､その照合要素の文字の並びを表す｡並びは角括弧表現のリストの一つの要素である｡複数文字の照合要素を有する地域化情報の中の角括弧表現は､一つ以上の文字に合致するかもしれない｡それで､ ^ で始まる角括弧表現は､(知らぬ間に)複数文字の照合要素と合致しうる､縦えどれも角括弧表現に現れなくとも! Within a bracket expression, a collating element (a character, a multi-character sequence that collates as if it were a single character, or a collating-sequence name for either) enclosed in [. and .] stands for the sequence of characters of that collating element. The sequence is a single element of the bracket expression's list. A bracket expression in a locale that has multi-character collating elements can thus match more than one character. So (insidiously), a bracket expression that starts with ^ can match multi-character collating elements even if none of them appear in the bracket expression!

  (註意: Tcl には複数文字の照合要素はない｡この情報は単なる説明である) (Note: Tcl has no multi-character collating elements. This information is only for illustration.)

譬えば､照合並びが多文字照合要素の ch を含むと仮定する｡すると､正規表現 “[[.ch.]]*c” (零又はそれ以上の “ch” に “c” が続く)は､ “chchcc” の最初の５文字に合致する｡又､正規表現 “[^c]b” は “chb” の全部に合致する(理由は “[^c]” は複数文字 “ch” に合致する)｡[訳註 1994年以前のスペイン語文法には１文字として扱う文字 “ch” があった｡これを引合いにして説明している] For example, assume the collating sequence includes a ch multi-character collating element. Then the RE “[[.ch.]]*c” (zero or more “chs” followed by “c”) matches the first five characters of “chchcc”. Also, the RE “[^c]b” matches all of “chb” (because “[^c]” matches the multi-character “ch”).

#### 等価級位 EQUIVALENCE CLASSES

角括弧表現内部では､ [= と =] で囲われた照合文字は級位と等価であり､全ての照合の要素の文字の連続を代表し､それ自身を含むその全てのものと等価である｡(もし､その他に等価な照合の要素がないと､扱いは､恰も取り囲んでいる区切り記号が “[.” と “.]” の如くになる｡) 譬えば､もし o と ô が等価な級位の一員であると､ “[[=o=]]” と “[[=ô=]]” と “[oô]” は類義語になる｡等価な級位は範囲の端にはならない｡ Within a bracket expression, a collating element enclosed in [= and =] is an equivalence class, standing for the sequences of characters of all collating elements equivalent to that one, including itself. (If there are no other equivalent collating elements, the treatment is as if the enclosing delimiters were “[.” and “.]”.) For example, if o and ô are the members of an equivalence class, then “[[=o=]]”, “[[=ô=]]”, and “[oô]” are all synonymous. An equivalence class may not be an endpoint of a range.

  (註意: Tcl はユニコードの地域化情報のみを実装する｡それは､如何なる等価な級位も定義していない｡上の例は単なる説明である) (Note: Tcl implements only the Unicode locale. It does not define any equivalence classes. The examples above are just illustrations.)

### ESCAPES

除外(escapes)は(高級正規表現のみ)､初めに \ があり､英数字文字が続く､幾つかの種類がある: 文字見出しと､級位の省略記法と､強制除外と､後方参照である｡ \ に英数字文字が続いたものであるが､高級正規表現では､有効な除外を構成しない組合せは不適になってしまう｡拡張正規表現では除外は存在しない: 角括弧表現の外では､英数字文字が続く \ は単にその通常の文字を表す､そして､角括弧表現の中では､ \ は通常の文字である｡(最後の箇所は拡張正規表現と高級正規表現が実際に両立しない箇所である｡) Escapes (AREs only), which begin with a \ followed by an alphanumeric character, come in several varieties: character entry, class shorthands, constraint escapes, and back references. A \ followed by an alphanumeric character but not constituting a valid escape is illegal in AREs. In EREs, there are no escapes: outside a bracket expression, a \ followed by an alphanumeric character merely stands for that character as an ordinary character, and inside a bracket expression, \ is an ordinary character. (The latter is the one actual incompatibility between EREs and AREs.)

#### 文字-見出し 除外 CHARACTER-ENTRY ESCAPES

文字-見出し 除外(高級正規表現のみ)は､非印刷記号で且つ､それ以外の正規表現内では不便な文字の指定を容易にする為に存在する:　　 Character-entry escapes (AREs only) exist to make it easier to specify non-printing and otherwise inconvenient characters in REs:

\a
  警告(鐘)記号､Ｃ言語に準ず alert (bell) character, as in C

\b
  １文字戻り記号､Ｃ言語に準ず backspace, as in C

\B
  \ の類義語､逆斜線の処理が多重の水準になっているある種の応用譜の中で､逆斜線の重複を減らす手助けの為　　　 synonym for \ to help reduce backslash doubling in some applications where there are multiple levels of backslash processing

\c X
  (ここで X は何かの文字)下５ビットが X と同じで､他のビットが全て零の文字 　 (where X is any character) the character whose low-order 5 bits are the same as those of X, and whose other bits are all zero

\e
  照合並びの名前が “ESC” の文字か､名前がないか､８進数値が 033の文字　 the character whose collating-sequence name is “ESC”, or failing that, the character with octal value 033

\f
  用紙送り､Ｃ言語に準ず formfeed, as in C

\n
  改行､Ｃ言語に準ず newline, as in C

\r
  行頭復帰､Ｃ言語に準ず carriage return, as in C

\t
  水平タブ､Ｃ言語に準ず horizontal tab, as in C

\u wxyz
  (ここで wxyz は４桁以内の一つの十六進数である)その箇所のバイトの並び順のユニコード文字 U+wxyz (where wxyz is one up to four hexadecimal digits) the Unicode character U+wxyz in the local byte ordering

\U stuvwxyz
  (ここで stuvwxyz は､８桁以内の一つの十六進数である)２１ビット以下のユニコード拡張用に予約されている｡数字は最初の非十六進数文字に出会う迄か､十六進数８個からなる最大値に到達するか､ U+10ffff の最大値内で桁溢れがおきる迄解析される｡ (where stuvwxyz is one up to eight hexadecimal digits) reserved for a Unicode extension up to 21 bits. The digits are parsed until the first non-hexadecimal character is encountered, the maximum of eight hexadecimal digits are reached, or an overflow would occur in the maximum value of U+10ffff.

\v
  垂直タブ､Ｃ言語と同様に様に vertical tab, as in C

\x hh
  (ここで hh は､一つ或は二つの十六進数)十六進数値が 0xhh の文字｡ (where hh is one or two hexadecimal digits) the character whose hexadecimal value is 0x hh.

\0
  値が 0 の文字 the character whose value is 0

\xyz
  (ここで xyz は､厳格に三桁の八進数で､後方参照でないこと(下を参照))八進数値が 0xyz の文字｡最初の十進数は 0-3 でなければならない､それ以外の場合､二桁書式が仮定される｡ (where xyz is exactly three octal digits, and is not a back reference (see below)) the character whose octal value is 0 xyz. The first digit must be in the range 0-3, otherwise the two-digit form is assumed.

\xy
  (ここで xy は､厳格に二桁の八進数で､後方参照でないこと(下を参照))八進数値が 0xy の文字 (where xy is exactly two octal digits, and is not a back reference (see below)) the character whose octal value is 0 xy

十六進数は “0–9” と “a–f” と “A–F” ｡８進数は “0–7” ｡ 　　　　　　　　 Hexadecimal digits are “0–9”, “a–f”, and “A–F”. Octal digits are “0–7”.

文字-見出し 除外は常に通常の文字として扱われる｡譬えば \135 はユニコードの ] であるが､ \135 は角括弧表現を閉じることはない｡用心すべきは､二重(或は四重)の “\” が必要かもしれない並びを､正規表現梱包が入手して見る前に､ある種の応用譜は(譬えば､正規表現が波括弧で括られていない場合には､Tcl 解釈実行機能やC機械言語翻訳譜が)そのような並びそのものを､解釈することがある｡　　　　 The character-entry escapes are always taken as ordinary characters. For example, \135 is ] in Unicode, but \135 does not terminate a bracket expression. Beware, however, that some applications (e.g., C compilers and the Tcl interpreter if the regular expression is not quoted with braces) interpret such sequences themselves before the regular-expression package gets to see them, which may require doubling (quadrupling, etc.) the “\”.

#### 級位-簡略表記 除外 CLASS-SHORTHAND ESCAPES

級位-簡略表記 除外(Class-shorthand escapes)は(高級正規表現のみ)､ある種の､よく使用する文字級位の簡略表記を提供する: Class-shorthand escapes (AREs only) provide shorthands for certain commonly-used character classes:

\d
  [[:digit:]] 訳註｢十進数｣

\s
  [[:space:]] 訳註｢空白｣

\w
  [[:alnum:]_\u203F\u2040\u2054\uFE33\uFE34\uFE4D\uFE4E\uFE4F\uFF3F] (句読的接続文字を含む including punctuation connector characters) 　 訳註｢英数字と下線(_)と句読的接続文字(⁀⁔︳︴﹍﹎﹏＿‿)｣

\D
  [^[:digit:]] 訳註｢十進数以外｣

\S
  [^[:space:]] 訳註｢空白以外｣

\W
  [^[:alnum:]_\u203F\u2040\u2054\uFE33\uFE34\uFE4D\uFE4E\uFE4F\uFF3F] (句読的接続文字を含む including punctuation connector characters) 　 訳註｢英数字と下線と句読的接続文字以外｣

角括弧表現内部では､ “\d” と “\s” と “\w” はその外側の角括弧を失う､又､ “\D” と “\S” と “\W” は不適切になる｡(故に､譬えば､ “[a-c\d]” は “[a-c[:digit:]]” と等価である｡又 “[a-c\D]” は “[a-c^[:digit:]]” と等価になり､不適切になってしまう｡) Within bracket expressions, “\d”, “\s”, and “\w” lose their outer brackets, and “\D”, “\S”, and “\W” are illegal. (So, for example, “[a-c\d]” is equivalent to “[a-c[:digit:]]”. Also, “[a-c\D]”, which is equivalent to “[a-c^[:digit:]]”, is illegal.)

#### 拘束除外 CONSTRAINT ESCAPES

拘束除外(constraint escape)は(高級正規表現のみ)､拘束する意味で､指定した条件が合うと空文字列に合致する､除外として書かれる: A constraint escape (AREs only) is a constraint, matching the empty string if specific conditions are met, written as an escape:

\A
  文字列の先頭にのみ合致する( “^” との違いは､下の MATCHING 参照) matches only at the beginning of the string (see MATCHING, below, for how this differs from “^”)

\m
  語の先頭にのみ合致する matches only at the beginning of a word

\M
  語の末尾にのみ合致する matches only at the end of a word

\y
  語の先頭或は末尾にのみ合致する matches only at the beginning or end of a word

\Y
  語の先頭或は末尾でない位置にのみ合致する matches only at a point that is not the beginning or end of a word

\Z
  文字列の末尾にのみ合致する( “$” との違いは､下の MATCHING 参照､) matches only at the end of the string (see MATCHING, below, for how this differs from “$”)

\m
  (ここで m は非零の数)後方参照､下を参照されたい (where m is a nonzero digit) a back reference, see below

\mnn
  (ここで m は非零の数､且つ nn は何かの数字､且つ 十進数値 mnn は括弧の捕捉の範囲の数より大きくないこと)後方参照､下を参照されたい (where m is a nonzero digit, and nn is some more digits, and the decimal value mnn is not greater than the number of closing capturing parentheses seen so far) a back reference, see below

語は上述の “[[:<:]]” と “[[:>:]]” の仕様のところで定義されている｡拘束除外は角括弧表現内部では､不適切になる｡ A word is defined as in the specification of “[[:<:]]” and “[[:>:]]” above. Constraint escapes are illegal within bracket expressions.

#### 後方参照 BACK REFERENCES

後方参照は(高級正規表現のみ)､数字により指定され､括弧で括られた部分表現に合致した同じ文字列に合致する｡そこで(譬えば) “([bc])\1” は “bb” 又は “cc” に合致するが “bc” には合致しない｡ 正規表現中では､部分表現は完全に後方参照に先行していなければならない｡部分表現は括弧が先に始まる順に番号が附られる｡非-捕捉の括弧は部分表現を定義しない｡　　　　　　　 A back reference (AREs only) matches the same string matched by the parenthesized subexpression specified by the number, so that (e.g.) “([bc])\1” matches “bb” or “cc” but not “bc”. The subexpression must entirely precede the back reference in the RE. Subexpressions are numbered in the order of their leading parentheses. Non-capturing parentheses do not define subexpressions.

八進数の文字-見出し除外､と後方参照の間には固有の歴史的な曖昧さがあり､上記助言から経験則で区分けしている｡零が先導する場合は常に八進数除外を指し示す｡一文字の非零数字で､後に数字が続かない時は常に後方参照と看做す｡零以外で始まる複数個の数字の並びは､もし適切な部分表現に添えられていると後方参照に扱う(即ち､数値が後方参照に適した値である)､そしてそれ以外は八進数と看做す｡ There is an inherent historical ambiguity between octal character-entry escapes and back references, which is resolved by heuristics, as hinted at above. A leading zero always indicates an octal escape. A single non-zero digit, not followed by another digit, is always taken as a back reference. A multi-digit sequence not starting with a zero is taken as a back reference if it comes after a suitable subexpression (i.e. the number is in the legal range for a back reference), and otherwise is taken as octal.

### METASYNTAX

上で述べた主要な構文に加えて､幾つかの形式と雑多な便利な構文が利用できる｡ In addition to the main syntax described above, there are some special forms and miscellaneous syntactic facilities available.

通常､使用される正規表現の種類は応用譜依存の手段で指定された｡しかし､これは指定 director により上書き可能である｡もし何かの正規表現が “***:” で始まっていると､残りの正規表現は高級正規表現である｡もし何かの正規表現が “***=” で始まっていると､残りの正規表現は文字列として扱われ､全ての文字は通常の文字と看做される｡ Normally the flavor of RE being used is specified by application-dependent means. However, this can be overridden by a director. If an RE of any flavor begins with “***:”, the rest of the RE is an ARE. If an RE of any flavor begins with “***=”, the rest of the RE is taken to be a literal string, with all characters considered ordinary characters.

高級正規表現 は埋め込み指示項目で始まってもよい: 継続した (?xyz) (ここで xyz は一つ或はそれ以上のローマ字)は､残りの正規表現に影響する指示項目を指定する｡この補足は､応用譜により指定されるとどの様な指示項目であろうと上書きが可能である｡利用できる指定文字は: An ARE may begin with embedded options: a sequence (?xyz) (where xyz is one or more alphabetic characters) specifies options affecting the rest of the RE. These supplement, and can override, any options specified by the application. The available option letters are:

b
  残りの正規表現は基本正規表現 rest of RE is a BRE

c
  大文字小文字を区別して合致(通常の省略時設定) case-sensitive matching (usual default)

e
  残りの正規表現は拡張正規表現 rest of RE is an ERE

i
  大文字小文字を区別せず合致(下の合致 MATCHING を参照のこと) case-insensitive matching (see MATCHING, below)

m
  歴史的な n の類義語 historical synonym for n

n
  改行を検知しながら合致(下の MATCHING を参照のこと) newline-sensitive matching (see MATCHING, below)

p
  部分的に改行を検知しながら合致(下の MATCHING を参照のこと) partial newline-sensitive matching (see MATCHING, below)

q
  残りの正規表現は (“引用符で囲まれた”) 逐語的文字列､全てが通常の文字 rest of RE is a literal (“quoted”) string, all ordinary characters

s
  改行検知せずに合致(通常の省略時設定) non-newline-sensitive matching (usual default)

t
  詰込構文(通常の省略時設定; 下記参照) tight syntax (usual default; see below)

w
  逆に部分的に改行を検知する (“妙な”) 合致(下の MATCHING を参照のこと) inverse partial newline-sensitive (“weird”) matching (see MATCHING, below)

x
  拡張構文(下記参照) expanded syntax (see below)

埋め込み指示項目は ) を継続部の終端として扱う｡これは 高級正規表現 の始まりの所のみで利用でき､その後の範囲では使用できない｡ Embedded options take effect at the ) terminating the sequence. They are available only at the start of an ARE, and may not be used later within it.

全ての文字が意味を有する通常の正規表現(厳格)に加えて､拡張構文があり､ -expanded 指示項目を使って全ての正規表現で使用できる､高級正規表現では更に埋め込み拡張構文の x 指示項目がある｡この拡張構文では､空白は無視され､又､ # と次の改行(又は正規表現の末尾)の間の全ての文字は無視され､込み入った正規表現に､段落と注釈を提供する｡この基本規則に３つの例外がある: In addition to the usual (tight) RE syntax, in which all characters are significant, there is an expanded syntax, available in all flavors of RE with the -expanded switch, or in AREs with the embedded x option. In the expanded syntax, white-space characters are ignored and all characters between a # and the following newline (or the end of the RE) are ignored, permitting paragraphing and commenting a complex RE. There are three exceptions to that basic rule:

- “\” が先行する空白や “#” は保持される a white-space character or “#” preceded by “\” is retained

- 角括弧表現内部では空白や “#” は保持される white space or “#” within a bracket expression is retained

- 高級正規表現の “(?:” や基本正規表現の “\(” の様な複数-文字記号の中に挟んだ空白や注釈は不適切になる white space and comments are illegal within multi-character symbols like the ARE “(?:” or the BRE “\(”

拡張構文の空白文字は空白､タブ､改行､その他､なんであれ､空白文字級位に属する文字､である｡ Expanded-syntax white-space characters are blank, tab, newline, and any character that belongs to the space character class.

最後に､高級正規表現では､角括弧表現の外部では､並び “(?#ttt)” (ここで ttt は “)” を含まない任意の文章)は注釈であって､完全に無視される｡但し､ “(?:” の様な複数-文字記号の間に挟むことはできない｡ このような注釈は通常の便益と言うより歴史的人工遺物であり､その使用には批判がある; 代わりに拡張構文を使うべきである｡ Finally, in an ARE, outside bracket expressions, the sequence “(?#ttt)” (where ttt is any text not containing a “)”) is a comment, completely ignored. Again, this is not allowed between the characters of multi-character symbols like “(?:”. Such comments are more a historical artifact than a useful facility, and their use is deprecated; use the expanded syntax instead.

もし応用譜(又は初めの “***=” 指定)が使用者の入力が正規表現ではなく文字として扱われる様に指定されている場合は､このような擬似構文拡張のどれも利用できない｡ None of these metasyntax extensions is available if the application (or an initial “***=” director) has specified that the user's input be treated as a literal string rather than as an RE.

### MATCHING

正規表現が､与えられた文字列の幾つもの部分文字列に合致可能な事態が生じると､その正規表現はその文字列の中で開始位置が最も先頭に近い部分文字列に合致する｡もし､正規表現がその位置で複数の部分文字列に合致可能であると､優先順位によって選択が決定される:即ち､ 最長部分文字列か最短部分文字列かのどれか｡ In the event that an RE could match more than one substring of a given string, the RE matches the one starting earliest in the string. If the RE could match more than one substring starting at that point, its choice is determined by its preference: either the longest substring, or the shortest.

殆どの基本子､及び全ての拘束子は優先順位がない｡括弧で括った正規表現は正規表現と同じ優先順位(なしも含めて)を有する｡数量修飾子 {m} 又は {m}? を伴った基本子は､基本子自身と同じ優先順位(なしも含めて)を有する｡それ以外の通常の数量修飾子(m が n に等しい{m,n} を含む)を伴った基本子は最長合致の優先順位を有する｡それ以外の非貪欲な量修飾子(m が n に等しい{m,n}? を含む)は最短優先合致である｡選択肢は､その中の優先順位を有している最初の数量修飾された基本子､と同じ優先順位を有する｡ 二つ或はそれ以上の | 演算子によって接続された選択肢により構成される正規表現は､最長合致の優先順位を有する｡ Most atoms, and all constraints, have no preference. A parenthesized RE has the same preference (possibly none) as the RE. A quantified atom with quantifier {m} or {m}? has the same preference (possibly none) as the atom itself. A quantified atom with other normal quantifiers (including {m,n} with m equal to n) prefers longest match. A quantified atom with other non-greedy quantifiers (including {m,n}? with m equal to n) prefers shortest match. A branch has the same preference as the first quantified atom in it which has a preference. An RE consisting of two or more branches connected by the | operator prefers longest match.

正規表現全体の合致の規則が拘束されることを受けて､正規表現内で先に始まる部分表現が後に始まるものに優先するので､それによる優先順位に基いて､部分表現は､可能な最長の部分文字列に合致したり､最短のものに合致したりする｡註意すべきは､外側の部分表現が､要素の部分表現に優先する｡ Subject to the constraints imposed by the rules for matching the whole RE, subexpressions also match the longest or shortest possible substrings, based on their preferences, with subexpressions starting earlier in the RE taking priority over ones starting later. Note that outer subexpressions thus take priority over their component subexpressions.

部分表現或は全体正規表現上で､量修飾子 {1,1} と {1,1}? はそれぞれ最長優先と最短優先を強制することに使用可能である｡ The quantifiers {1,1} and {1,1}? can be used to force longest and shortest preference, respectively, on a subexpression or a whole RE.

  註意: このことは､部分表現或は全体正規表現上で､拘束子なしの基本子､又は括弧で括られた部分表現の後に {1,1}? を挿入するすることにより､正規表現を全体で非-貪欲にすることができることを意味する｡もしこの水準の複雑さを使って正規表現を書くときには､入力文の中の適切な範囲に非貪欲性を上書きすることで実験すること｡ NOTE: This means that you can usually make a RE be non-greedy overall by putting {1,1}? after one of the first non-constraint atoms or parenthesized sub-expressions in it. It pays to experiment with the placing of this non-greediness override on a suitable range of input texts when you are writing a RE if you are using this level of complexity.

  譬えば､この正規表現は非貪欲であり､与えられた可能な最短の部分文字列と一致し､そこで､ “abc” が可能な限り最速で一致する(量修飾子で変わる事はない)｡ For example, this regular expression is non-greedy, and will match the shortest substring possible given that “abc” will be matched as early as possible (the quantifier does not change that):

      ab{1,1}?c.*x.*cba

  この基本子 “a” は､貪欲性を有してはなく､ “b” には明白に非貪欲性を賦与し､残りの量修飾子は､先行する非貪欲性の量修飾子によって上書きされる｡ The atom “a” has no greediness preference, we explicitly give one for “b”, and the remaining quantifiers are overridden to be non-greedy by the preceding non-greedy quantifier.

合致長は､文字単位で測定し､照合並びの要素単位ではない｡空文字は何も合致しないものより長いと看做す｡譬えば､ “bb*” は “abbbc” の中央付近の３文字に合致する､ “(week|wee)(night|knights)” は “weeknights” の全ての十文字に合致する､ “(.*).*” が “abc” に合致する時､括弧で括られた部分表現が三つの文字全部に合致する､又､ “(a*)*” が “bc” に合致する時､全体の正規表現と括弧で括った部分表現の両方が空文字列に一致する｡ Match lengths are measured in characters, not collating elements. An empty string is considered longer than no match at all. For example, “bb*” matches the three middle characters of “abbbc”, “(week|wee)(night|knights)” matches all ten characters of “weeknights”, when “(.*).*” is matched against “abc” the parenthesized subexpression matches all three characters, and when “(a*)*” is matched against “bc” both the whole RE and the parenthesized subexpression match an empty string.

もし､大文字小文字区別なし合致が指定されると､その効果は恰も全ての大文字小文字区別がローマ字から消え去るかの如きである｡角括弧表現の外側にローマ字が大小混合で通常の文字として現れると､効果的に大小両方を含む角括弧表現に変換される､そこで x は “[xX]” になる｡角括弧表現内に現れると､大小の相手側も角括弧表現に追加され､故に “[x]” は “[xX]” に､ “[^x]” は “[^xX]” になる｡ If case-independent matching is specified, the effect is much as if all case distinctions had vanished from the alphabet. When an alphabetic that exists in multiple cases appears as an ordinary character outside a bracket expression, it is effectively transformed into a bracket expression containing both cases, so that x becomes “[xX]”. When it appears inside a bracket expression, all case counterparts of it are added to the bracket expression, so that “[x]” becomes “[xX]” and “[^x]” becomes “[^xX]”.

もし､改行検知合致が指定されると . 及び ^ を使用する角括弧表現は改行記号に合致することはない(故に､正規表現が明示的に手配しない限り､合致が改行を跨ぐことはない)､そして ^ と $ は､文字列の最初と末尾にそれぞれ合致するのに加えて､改行の直後と直前の空文字列に合致する｡高級正規表現では \A と \Z は文字列の先頭と末尾にのみ合致するに留まる｡ If newline-sensitive matching is specified, . and bracket expressions using ^ will never match the newline character (so that matches will never cross newlines unless the RE explicitly arranges it) and ^ and $ will match the empty string after and before a newline respectively, in addition to matching at beginning and end of string respectively. ARE \A and \Z continue to match beginning or end of string only.

もし､部分的な改行検知合致が指定されると､これによって . と角括弧表現は改行検知合致として影響され ^ と $ は影響されない｡ If partial newline-sensitive matching is specified, this affects . and bracket expressions as with newline-sensitive matching, but not ^ and $.

もし､逆部分改行検知合致が指定されると､それにより ^ と $ は改行検知合致に影響を受けるが . と角括弧表現は受けない｡これはそれ程便利ではないが､対称性の為に導入された｡ If inverse partial newline-sensitive matching is specified, this affects ^ and $ as with newline-sensitive matching, but not . and bracket expressions. This is not very useful but is provided for symmetry.

### 限界と互換性 LIMITS AND COMPATIBILITY

正規表現の長さを強制する特定の限界はない｡高度な互換性を意図した譜では正規表現の長さを２５６バイトを超えて費やさない様にすべきである､理由は､ POSIX命令の実装はこの様な正規表現の受入を拒否する可能性がある｡ No particular limit is imposed on the length of REs. Programs intended to be highly portable should not employ REs longer than 256 bytes, as a POSIX-compliant implementation can refuse to accept such REs.

高級正規表現の性質で POSIX の拡張正規表現と実質的に両立しない唯一のものは､ \ が角括弧表現内で特別な意味合いを失わないことである｡他の全ての高級正規表現の構文を使う性質で､不適切或は未定義､又は未規定のものは POSIX の拡張正規表現中で影響する; 指定の *** 構文の様なものは基本正規表現と拡張正規表現の両方にとって POSIX 構文の埒外である｡ The only feature of AREs that is actually incompatible with POSIX EREs is that \ does not lose its special significance inside bracket expressions. All other ARE features use syntax which is illegal or has undefined or unspecified effects in POSIX EREs; the *** syntax of directors likewise is outside the POSIX syntax for both BREs and EREs.

多くの高級正規表現拡張は Perl 言語から借用しているが､あるものは､変更されて追出され､幾つかの Perl 拡張は現存しない｡註意すべき非互換性を含むものは “\b” と “\B” と改行末尾の特別な取扱の不足と､改行感知合致に影響されたものへの角括弧表現の補完の追加､括弧の制限と､先読み中の後方参照の制限と､最長/最短合致(最初合致よりも)意味論である｡ Many of the ARE extensions are borrowed from Perl, but some have been changed to clean them up, and a few Perl extensions are not present. Incompatibilities of note include “\b”, “\B”, the lack of special treatment for a trailing newline, the addition of complemented bracket expressions to the things affected by newline-sensitive matching, the restrictions on parentheses and back references in lookahead constraints, and the longest/shortest-match (rather than first-match) matching semantics.

通常の量修飾子と非貪欲な量修飾子の両方を含む正規表現の合致規則は､梱包の初期の試用版以来変更された｡(新しい規則は単純明快であるが使用者の実際の意向を推測することは困難で動作させるのは厳しい｡) The matching rules for REs containing both normal and non-greedy quantifiers have changed since early beta-test versions of this package. (The new rules are much simpler and cleaner, but do not work as hard at guessing the user's real intentions.)

ヘンリーさんの元々の 1986 regexp 梱包は､今日の拡張正規表現の初期の版が実装され､猶も広く使用されている(譬えば､Tcl 8.1の先行配布版)｡正規表現の近似拡張正規表現 (近似正規表現と略記)と高級正規表現の間には４つの非互換性がある｡大雑把に重要性の増す順に: 　　 Henry Spencer's original 1986 regexp package, still in widespread use (e.g., in pre-8.1 releases of Tcl), implemented an early version of today's EREs. There are four incompatibilities between regexp's near-EREs (“RREs” for short) and AREs. In roughly increasing order of significance:

- 高級正規表現の中では､ \ に英数字が添えられると､除外(escape)か不具合であるが､一方近似正規表現では､英数字の書き方の方法の一つである｡近似正規表現で､この様な並びの書き方をする理由がないので特に問題にならないようだ｡ In AREs, \ followed by an alphanumeric character is either an escape or an error, while in RREs, it was just another way of writing the alphanumeric. This should not be a problem because there was no reason to write such a sequence in RREs.

- 高級正規表現の中では､ { に数字が添えられると､束縛の初まり､であるが､一方近似正規表現では､{ は常に通常の文字である｡この様な並びは恐らく稀であり､大概は不都合になる､理由はそれに続く文字並びが適切な束縛に似ていないから｡ { followed by a digit in an ARE is the beginning of a bound, while in RREs, { was always an ordinary character. Such sequences should be rare, and will often result in an error because following characters will not look like a valid bound.

- 高級正規表現の中では､ \ は “[ ]” の中でも特別な意味を有する､故に､ [ ] の中では文字 \ は “\\” と書く必要がある｡ \\ は近似正規表現の [ ] の中でも文字 \ を与える､しかし､真にオタクの算譜作者だけが常習的に逆斜線を二重にしている｡ In AREs, \ remains a special character within “[ ]”, so a literal \ within [ ] must be written “\\”. \\ also gives a literal \ within [ ] in RREs, but only truly paranoid programmers routinely doubled the backslash.

- 高級正規表現は､正規表現に関して､指定された捜索順序中に最初に見出した合致ではなく､寧ろ 最長/最短合致を報告する｡これは､最初の合致が報告される筈と期待して書かれた､近似正規表現に影響を及ぼすかもしれない｡(最速合致順に向け捜索順を最適化するための､近似正規表現の念入りな作成は旧式になった(高級正規表現は全ての合致の可能性を平行して行う､その出来栄えが複雑さを寛恕化する)しかし､意図的に 最長/最短ではない合致を見つける為に開発された捜索順序は書き直しを要することになる) 　　　　 AREs report the longest/shortest match for the RE, rather than the first found in a specified search order. This may affect some RREs which were written in the expectation that the first match would be reported. (The careful crafting of RREs to optimize the search order for fast matching is obsolete (AREs examine all possible matches in parallel, and their performance is largely insensitive to their complexity) but cases where the search order was exploited to deliberately find a match which was not the longest/shortest will need rewriting.)

### 基本正規表現 BASIC REGULAR EXPRESSIONS

基本正規表現は拡張正規表現から幾つかの点で異なっている､ “|” と “+” と ? とは通常の文字で､それらの機能については等価ではない｡束縛の区切り記号は \{ と “\}” であり､ { と } そのものは通常の文字である｡部分表現を入れ子にする括弧は \( と “\)” で､ ( と ) そのものは通常の文字である､^ は正規表現の先頭又は､括弧で括った部分表現の先頭以外では普通の文字である､$ は正規表現の末尾又は､括弧で括った部分表現の末尾以外では普通の文字である､又､* は正規表現の先頭又は､括弧で括った部分表現の先頭に現れると普通の文字である( “^” があると､その後でも)｡最後に､一つの数字の後方参照が利用でき､又 \< と \> はそれぞれ “[[:<:]]” と “[[:>:]]” の類義語である; それ以外の除外(escapes )は利用できる｡ BREs differ from EREs in several respects. “|”, “+”, and ? are ordinary characters and there is no equivalent for their functionality. The delimiters for bounds are \{ and “\}”, with { and } by themselves ordinary characters. The parentheses for nested subexpressions are \( and “\)”, with ( and ) by themselves ordinary characters. ^ is an ordinary character except at the beginning of the RE or the beginning of a parenthesized subexpression, $ is an ordinary character except at the end of the RE or the end of a parenthesized subexpression, and * is an ordinary character if it appears at the beginning of the RE or the beginning of a parenthesized subexpression (after a possible leading “^”). Finally, single-digit back references are available, and \< and \> are synonyms for “[[:<:]]” and “[[:>:]]” respectively; no other escapes are available.

### SEE ALSO

RegExp, regexp, regsub, lsearch, switch, text

### KEYWORDS

match, regular expression, string
Copyright © 1998 Sun Microsystems, Inc.
Copyright © 1999 Scriptics Corporation