init(pattern: String, options: NSRegularExpression.Options)
Overview 概要
The fundamental matching method for NSRegular
is a Block iterator method that allows clients to supply a Block object which will be invoked each time the regular expression matches a portion of the target string. There are additional convenience methods for returning all the matches as an array, the total number of matches, the first match, and the range of the first match.
NSRegular
の基本となるマッチング・メソッドは、「ブロック」イテレータメソッド(反復子メソッド)です、それは、その正規表現が目標文字列のある部分にマッチするたびに呼び出される「ブロック」オブジェクトを、クライアントが提供できるようにするものです。全てのマッチの配列、マッチの総数、最初のマッチ、そして最初のマッチの範囲を返す、いっそう便利なメソッドもあります。
An individual match is represented by an instance of the NSText
class, which carries information about the overall matched range (via its range
property), and the range of each individual capture group (via the range(at:)
method). For basic NSRegular
objects, these match results will be of type regular
, but subclasses may use other types.
ある特定のマッチはNSText
クラスのインスタンスによって表されます、そして、それはマッチされた全体の範囲(そのrange
プロパティによって)、そして個々の捕獲グループの範囲(range(at:)
メソッドによって)に関する情報を持ち運びます。基本的なNSRegular
オブジェクトに対して、これらのマッチ結果は型regular
のものです、しかしサブクラスは他の型を使うかもしれません。
Note 注意
NSRegular
conforms to the International Components for Unicode (ICU) specification for regular expressions.
NSRegular
は、正規表現のためのUnicode用国際化コンポーネント(ICU)仕様に準拠します。
Examples Using NSRegularExpression NSRegularExpressionの使用例
What follows are a set of graduated examples for using the NSRegular
class. All these examples use the regular expression \\b(a|b)(c|d)\\b
as their regular expression.
以下のものは、NSRegular
クラスの使用に対する一揃いの段階的な例です。これらの例の全ては、それらの正規表現として正規表現\\b(a|b)(c|d)\\b
を使います。
This snippet creates a regular expression to match two-letter words, in which the first letter is “a” or “b” and the second letter is “c” or “d”. Specifying case
means that matches will be case-insensitive, so this will match “BC”, “aD”, and so forth, as well as their lower-case equivalents.
この切れっぱしは、最初の文字が“a”または“b”で2番目の文字が“c”または“d”であるところの、2文字単語にマッチする正規表現をつくります。case
の指定は、マッチが大文字と小文字の区別をしないことを意味します、それでこれは、“BC”、“aD”、その他にマッチします、それらの小文字の等価物だけではなしに。
The number
method provides a simple mechanism for counting the number of matches in a given range of a string.
number
メソッドは、ある文字列の与えられた範囲においてマッチの数を数えるための単純な仕組みを提供します。
If you are interested only in the overall range of the first match, the range
method provides it for you. Some regular expressions (though not the example pattern) can successfully match a zero-length range, so the comparison of the resulting range with {NSNot
is the most reliable way to determine whether there was a match or not.
あなたが最初のマッチの範囲だけに興味があるならば、range
メソッドがあなたにそれを与えます。若干の正規表現は(例パターンはそうでないけれども)成功裏にゼロ長の範囲にマッチすることができるので、結果として生じる範囲を{NSNot
と比較することは、マッチがあったかどうか判定する最も信頼できる方法です。
The example regular expression contains two capture groups, corresponding to the two sets of parentheses, one for the first letter, and one for the second. If you are interested in more than just the overall matched range, you want to obtain an NSText
object corresponding to a given match. This object provides information about the overall matched range, via its range
property, and also supplies the capture group ranges, via the range(at:)
method. The first capture group range is given by [result range
, the second by [result range
.
この例の正規表現は、最初の文字のためのものと2番目のためのもの、2つの括弧対に対応している、2つの捕獲グループを含みます。あなたが単にマッチした範囲全体だけでなくより多くのことに興味を持つならば、あなたは与えられたマッチに対応しているNSText
オブジェクトを得るといいでしょう。このオブジェクトは、そのrange
プロパティによって、全体的なマッチされた範囲に関する情報を提供して、そのうえ、range(at:)
メソッドによって、捕獲グループの範囲を供給します。最初の捕獲グループ範囲は[result range
で、2番目は[result range
で与えられます。
Sending a result the range(at:)
message and passing 0
is equivalent to [result range]
.
If the result returned is non-nil
, then [result range]
will always be a valid range, so it is not necessary to compare it against {NSNot
. However, for some regular expressions (though not the example pattern) some capture groups may or may not participate in a given match. If a given capture group does not participate in a given match, then [result range
will return {NSNot
.
返される結果がnil
でないならば、[result range]
は常に有効な範囲であるので、それを{NSNot
と比較することは必要ではありません。しかし、若干の正規表現では(例パターンはそうでないけれども)いくつかの捕獲グループが、ある与えられたマッチに関与するかもしれないし、しないかもしれません。ある捕獲グループが与えられたマッチに関与しないならば、 [result range
は{NSNot
を返すでしょう。
The matches(in:
returns all the matching results.
matches(in:
は、全てのマッチした結果を返します。
The first
method is similar to matches(in:
but it returns only the first match.
first
メソッドはmatches(in:
に似ています、しかしそれは最初のマッチだけを返します。
The Block enumeration method enumerate
is the most general and flexible of the matching methods of NSRegular
. It allows you to iterate through matches in a string, performing arbitrary actions on each as specified by the code in the Block and to stop partway through if desired. In the following example case, the iteration is stopped after a certain number of matches have been found.
「ブロック」列挙メソッドenumerate
は、NSRegular
のマッチング・メソッドの最も一般的で柔軟性に富むものです。それはある文字列の中のマッチすべてに対して、それぞれにおいて「ブロック」のコードで指定される通りに任意のアクションの実行を繰り返すこと、そして希望する場合には最後までの途中で中止することをあなたに可能にします。以下の例の場合には、繰り返しは、特定の数のマッチが見つけられた後で中止されます。
If neither of the special options report
or report
is specified, then the result argument to the Block is guaranteed to be non-nil
, and as mentioned before, it is guaranteed to have a valid overall range. See NSRegular
for the significance of report
or report
.
特別なオプションreport
またはreport
のどちらも指定されないならば、「ブロック」に対する結果引数は、nil
でないことを保証されます、そして前に言及されたように、それは有効な全体的な範囲を持つと保証されます。NSRegular
をreport
やreport
の意義のために見てください。
NSRegular
also provides simple methods for performing find-and-replace operations on a string. The following example returns a modified copy, but there is a corresponding method for modifying a mutable string in place. The template specifies what is to be used to replace each match, with $0
representing the contents of the overall matched range, $1
representing the contents of the first capture group, and so on. In this case, the template reverses the two letters of the word.
NSRegular
はまた、単純なメソッドを検索置換操作を文字列において実行するために提供します。以下の例は修正されたコピーを返します、しかし可変文字列をその場で修正する対応するメソッドがあります。テンプレート(ひな形)は、全体的なマッチされた範囲の内容を表す$0
、そして最初の捕獲グループ内容を表す$1
など、各マッチを置換するために何が使われることになるかを指定します。この場合では、テンプレートは語の2つの文字を逆にします。
Concurrency and Thread Safety 並列性とスレッド安全
NSRegular
is designed to be immutable and thread safe, so that a single instance can be used in matching operations on multiple threads at once. However, the string on which it is operating should not be mutated during the course of a matching operation, whether from another thread or from within the Block used in the iteration.
NSRegular
はイミュータブル(不変)でスレッドセーフに設計されます、そのため単一のインスタンスが同時に複数のスレッドの上でのマッチング操作で使われることができます。しかしながら、別のスレッド由来かまたは繰り返しにおいて使われる「ブロック」内部由来かどうかに関係なく、それが作用している文字列がマッチング操作の経過の間に変化しないようにする必要があります。
Regular Expression Syntax 正規表現構文
The following tables describe the character expressions used by the regular expression to match patterns within a string, the pattern operators that specify how many times a pattern is matched and additional matching restrictions, and the last table specifies flags that can be included in the regular expression pattern that specify search behavior over multiple lines (these flags can also be specified using the NSRegular
option flags.
以下の表は、ある文字列内部においてさまざまな類型(パターン)にマッチするために正規表現において使われる文字表現、どのくらい多くの回数あるパターンがマッチするかを、そして特別なマッチング制約を指定するパターン演算子を解説します、そして最後の表は正規表現パターンに含めることが出来るフラグを指定します、それは複数行にわたる検索挙動を指定します(これらのフラグはまた、NSRegular
オプションフラグを使って指定されることができます)。
Regular Expression Metacharacters 正規表現メタ文字
Table 1 describe the character sequences used to match characters within a string. 表 1は、ある文字列内のなんらかの文字にマッチするために使われる文字表記を記述します。
Character Expression 文字表現 |
Description 説明 |
---|---|
|
Match a BELL, |
|
Match at the beginning of the input. Differs from |
|
Match if the current position is a word boundary. Boundaries occur at the transitions between word ( |
|
Match a BACKSPACE, |
|
Match if the current position is not a word boundary. 現在の位置が単語境界でないならば、マッチします。 |
|
Match a |
|
Match any character with the Unicode General Category of Nd (Number, Decimal Digit.) Unicode一般カテゴリーのNd(数、10進数)であるどんな文字にでもにマッチします。 |
|
Match any character that is not a decimal digit. 10進数でないどんな文字にでもマッチします。 |
|
Match an |
|
Terminates a |
|
Match a FORM FEED, |
|
Match if the current position is at the end of the previous match. 現在の位置が直前のマッチの終わりにあるならば、マッチします。 |
|
Match a |
|
Match the named character. 指定された文字にマッチします。 |
|
Match any character with the specified Unicode Property. 指定された「Unicodeプロパティ」を持つどんな文字でもマッチします。 |
|
Match any character not having the specified Unicode Property. 指定された「Unicodeプロパティ」を持っていないどんな文字にでもマッチします。 |
|
Quotes all following characters until |
|
Match a CARRIAGE RETURN, \u000D. キャリッジ・リターン(\u000D)にマッチします。 |
|
Match a white space character. White space is defined as [\t\n\f\r\p{Z}]. 空白文字にマッチします。空白は、 [\t\n\f\r\p{Z}]として定義されます。 |
|
Match a non-white space character. 空白でない文字にマッチします。 |
|
Match a HORIZONTAL TABULATION, |
|
Match the character with the hex value hhhh. 16進値hhhhをもつ文字にマッチします。 |
|
Match the character with the hex value hhhhhhhh. Exactly eight hex digits must be provided, even though the largest Unicode code point is |
|
Match a word character. Word characters are [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}]. 単語文字にマッチします。単語文字は、[\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}]です。 |
|
Match a non-word character. 非単語文字にマッチします。 |
|
Match the character with hex value hhhh. From one to six hex digits may be supplied. 16進値hhhhでの文字にマッチします。1から6桁までの16進数が、供給されることができます。 |
|
Match the character with two digit hex value hh. 2桁16進値hhでの文字にマッチします。 |
|
Match a Grapheme Cluster. Grapheme Cluster(書記素クラスタ)にマッチします。 |
|
Match if the current position is at the end of input, but before the final line terminator, if one exists. 現在の位置が入力の終わりにあるならばマッチします、しかし、もしそれが存在するならば、最終行終端子の前で。 |
|
Match if the current position is at the end of input. 現在の位置が入力の終わりにあるならばマッチします。 |
|
Back Reference. Match whatever the nth capturing group matched. n must be a number |
|
Match an Octal character. ooo is from one to three octal digits. |
|
Match any one character from the pattern. パターンからの何らかの1つの文字にマッチします。 |
|
Match any character. See |
|
Match at the beginning of a line. See |
|
Match at the end of a line. See |
|
Quotes the following character.
続く文字を引用します。
Characters that must be quoted to be treated as literals are |
Regular Expression Operators 正規表現演算子
Table 2 defines the regular expression operators. 表 2は正規表現演算子を定義します。
Operator 演算子 |
Description 説明 |
---|---|
|
Alternation. A |
|
Match |
|
Match |
|
Match zero or one times. Prefer one. 0か1の繰り返しにマッチします。1を優先して選びます。 |
|
Match exactly n times. 正確にn回にマッチします。 |
|
Match at least n times. Match as many times as possible. 少なくともn回にマッチします。できるだけ多くの回数をマッチします。 |
|
Match between n and m times. Match as many times as possible, but not more than m. nとm回の間のマッチ。可能なかぎり多くの、しかしmより多くでない、回数にマッチします。 |
|
Match |
|
Match 1 or more times. Match as few times as possible. 1以上の繰り返しにマッチします。できるだけ少しの回数にしかマッチしません。 |
|
Match zero or one times. Prefer zero. 0か1の繰り返しにマッチします。ゼロを優先します。 |
|
Match exactly n times. きっちりn回にマッチします。 |
|
Match at least n times, but no more than required for an overall pattern match. 少なくともn回にマッチします、しかしパターン・マッチ全体的のために要求されるより多くではありません。 |
|
Match between n and m times. Match as few times as possible, but not less than n. nとm回の間にマッチします。可能な限り少なくマッチします、しかしnより少なくではありません。 |
|
Match 0 or more times. 0以上の繰り返しにマッチします。 Match as many times as possible when first encountered. Do not retry with fewer, even if overall match fails (possessive match). |
|
Match 1 or more times (possessive match). |
|
Match zero or one times (possessive match). |
|
Match exactly n times. 正確にn回にマッチします。 |
|
Match at least n times (possessive match). |
|
Match between n and m times (possessive match). |
|
Capturing parentheses. Range of input that matched the parenthesized subexpression is available after the match. 捕獲する括弧。括弧に入れられた正規表現部分にマッチした入力の範囲は、マッチ終了後に利用できます。 |
|
Non-capturing parentheses. Groups the included pattern, but does not provide capturing of matching text. Somewhat more efficient than capturing parentheses. 捕獲しない括弧。含まれるパターンをグループにします、しかしマッチしているテキストの捕獲を提供しません。捕獲する括弧よりいくぶん効率的なもの。 |
|
Atomic-match parentheses. First match of the parenthesized subexpression is the only one tried; if it does not lead to an overall pattern match, back up the search for a match to a position before the " |
|
Free-format comment |
|
Look-ahead assertion. True if the parenthesized pattern matches at the current input position, but does not advance the input position. 前方指定。括弧に入れられたパターンが現在の入力での位置でマッチするならば真、しかし入力での位置を進めません。 |
|
Negative look-ahead assertion. True if the parenthesized pattern does not match at the current input position. Does not advance the input position. 否定の前方指定。括弧に入れられたパターンが現在の入力での位置でマッチしないならば真。入力での位置を進めません。 |
|
Look-behind assertion. True if the parenthesized pattern matches text preceding the current input position, with the last character of the match being the input character just before the current position. Does not alter the input position. The length of possible strings matched by the look-behind pattern must not be unbounded (no * or + operators.) 後方指定。括弧に入れられたパターンが現在の入力位置の前のテキストにマッチするならば真、マッチの最後の文字がちょうど現在の位置の前の入力文字になる状態。入力位置を変えません。後方指定パターンによってマッチされる可能な文字列の長さは、限界がなければなりません(*または+演算子は不可)。 |
|
Negative Look-behind assertion. True if the parenthesized pattern does not match text preceding the current input position, with the last character of the match being the input character just before the current position. Does not alter the input position. The length of possible strings matched by the look-behind pattern must not be unbounded (no * or + operators.) 否定の後方指定。括弧に入れられたパターンが現在の入力位置の前のテキストにマッチしないならば真、マッチの最後の文字がちょうど現在の位置の前の入力文字になる状態。入力位置を変えません。後方指定パターンによってマッチされる可能な文字列の長さは、限界がなければなりません(*または+演算子は不可)。 |
|
Flag settings. Evaluate the parenthesized expression with the specified flags enabled or -disabled. The flags are defined in Flag Options. フラグ設定。指定されたフラグを有効にあるいは無効にして、括弧に入れられた表現を評価します。フラグは、「フラグ・オプション」で定義されます |
|
Flag settings. Change the flag settings. Changes apply to the portion of the pattern following the setting. For example, (?i) changes to a case insensitive match.The flags are defined in Flag Options. フラグ設定。フラグ設定を変更します。変更は、設定に続いているパターンの部分に適用されます。例えば、(?i)は、大文字小文字等を考慮しないマッチへ変更します。フラグは、「フラグ・オプション」で定義されます |
Template Matching Format テンプレートマッチング書式
The NSRegular
class provides find-and-replace methods for both immutable and mutable strings using the technique of template matching. Table 3 describes the syntax.
NSRegular
クラスは、検索置換メソッドをテンプレート(ひな形)マッチングのテクニックを使用して不変および可変の文字列両方のために用意します。表 3は、構文を記述します。
Character 文字 |
Descriptions 記述 |
---|---|
|
The text of capture group n will be substituted for $n. n must be |
|
Treat the following character as a literal, suppressing any special meaning. Backslash escaping in substitution text is only required for '$' and '\', but may be used on any other character without bad effects. 続く文字を文字通りに、あらゆる特別な意味を抑制して扱います。置換テキストにおいてバックスラッシュ・エスケープは『$』と『\』のために必要であるだけです、しかし悪い効果なしに他のどの文字についても使われることができます。 |
The replacement string is treated as a template, with $0
being replaced by the contents of the matched range, $1
by the contents of the first capture group, and so on. Additional digits beyond the maximum required to represent the number of capture groups will be treated as ordinary characters, as will a $
not followed by digits. Backslash will escape both $
and \
.
置き換え文字列はテンプレートとしてみなされ、$0
はマッチされた範囲の内容に、$1
は最初の捕獲グループの内容等々によって取り替えられます。捕獲グループの数を表すのに必要とされる最大を越えた追加の桁、そして桁が続かない$
もまた普通の文字とみなされます。バックスラッシュは、$
と\
をエスケープします。
Flag Options フラグ・オプション
The following flags control various aspects of regular expression matching. These flag values may be specified within the pattern using the (?ismx-ismx)
pattern options. Equivalent behaviors can be specified for the entire pattern when an NSRegular
is initialized, using the NSRegular
option flags.
以下のフラグは、正規表現マッチングのさまざまな面を制御します。これらのフラグ値は、パターンの範囲内で(?ismx-ismx)
パターン・オプションを使って指定されことができます。同等の挙動は、パターン全体に対してNSRegular
が初期化される時に、NSRegular
オプション・フラグを使って指定されることができます。
Flag (Pattern) フラグ(パターン) |
Description 説明 |
---|---|
i |
If set, matching will take place in a case-insensitive manner. 設定されるならば、マッチングは大文字と小文字の区別をしない方法で発生します。 |
x |
If set, allow use of white space and #comments within patterns 設定されるならば、パターンの範囲内で空白と#commentsの使用を許します |
s |
If set, a " |
m |
Control the behavior of " |
w |
Controls the behavior of |
Performance 性能
NSRegular
implements a nondeterministic finite automaton matching engine. As such, complex regular expression patterns containing multiple *
or +
operators may result in poor performance when attempting to perform matches — particularly failing to match a given input. For more information, see the “Performance Tips” section of the ICU User Guide.
NSRegular
は、ある非決定性有限オートマトンマッチエンジンを実装します。そういうことで、*
や+
演算子を含む複雑な正規表現式は、マッチ実行を試みようとすれば — とりわけ与えられた入力にマッチするのに失敗すれば、貧弱な性能という結果になります。さらなる情報として、ICUユーザガイドの“Performance Tips”の節を見てください。
ICU License ICUライセンス
Table 1, Table 2, Table 3, Table 4 are reproduced from the ICU User Guide, Copyright (c) 2000 - 2009 IBM and Others, which are licensed under the following terms: 表 1、表 2、表 3、表 4は、「ICUユーザー・ガイド」、著作権(c) 2000-2009 IBMその他、から転載されます、それは次の条項の下で認可されます:
COPYRIGHT AND PERMISSION NOTICE
Copyright (c) 1995-2009 International Business Machines Corporation and others. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder.
All trademarks and registered trademarks mentioned herein are the property of their respective owners.