Regular Expressions
正規表現修飾子(フラグ)
サーチ…
前書き
正規表現パターンは、正規表現の振る舞いを再定義する修飾子 ( フラグとも呼ばれます)でよく使用されます。 正規表現修飾子は通常のもの (例えば/abc/i
)とインライン (または埋め込み )(例えば(?i)abc
)とすることができます。最も一般的な修飾子は、大域的、大文字小文字を区別しない、複数行とドットの修飾子です。しかし、正規表現のフレーバは、サポートされている正規表現修飾子の数と型が異なります。
備考
PCRE修飾子
モディファイア | 列をなして | 説明 |
---|---|---|
PCRE_CASELESS | (?私) | 大文字小文字を区別しない |
PCRE_MULTILINE | (ωm) | 複数行のマッチング |
PCRE_DOTALL | (ωs) | . 新しい行と一致する |
PCRE_ANCHORED | (λA) | メタキャラクタ^ は開始時にのみマッチします |
PCRE_EXTENDED | (?バツ) | 空白は無視されます |
PCRE_DOLLAR_ENDONLY | 該当なし | メタ文字$ は最後にのみ一致します |
PCRE_EXTRA | (?バツ) | 厳密なエスケープ解析 |
PCRE_UTF8 | UTF-8 文字を処理する | |
PCRE_UTF16 | UTF-16 文字を処理する | |
PCRE_UTF32 | UTF-32 文字を処理する | |
PCRE_UNGREEDY | (ΔU) | エンジンをレイジーマッチングに設定する |
PCRE_NO_AUTO_CAPTURE | (?:) | 自動キャプチャグループを無効にする |
Java修飾子
修飾子( Pattern.### ) | 値 | 説明 |
---|---|---|
UNIX_LINES | 1 | Unixの回線モードを有効にします。 |
大文字小文字を区別しません | 2 | 大文字と小文字を区別しない一致を有効にします。 |
コメント | 4 | パターン内の空白とコメントを許可します。 |
マルチライン | 8 | マルチラインモードを有効にします。 |
リテラル | 16 | パターンのリテラル解析を有効にします。 |
DOTALL | 32 | ドットモードを有効にします。 |
UNICODE_CASE | 64 | Unicode対応の大文字小文字の区別を有効にします。 |
CANON_EQ | 128 | 標準的な等価性を有効にします。 |
UNICODE_CHARACTER_CLASS | 256 | 定義済みの文字クラスとPOSIX文字クラスのUnicode版を有効にします。 |
DOTALL修飾子
DOTALL修飾子(ほとんどの正規表現の味ではs
表されます)が動作を変更する正規表現パターンです.
改行(LF)シンボルに一致させることができます。
/cat (.*?) dog/s
このPerlスタイルの正規表現は、 "cat fled from\na dog"
"fled from\na"
からグループ1に"fled from\na"
キャプチャのような文字列にマッチします。
インラインバージョン:( (?s)
(例えば(?s)cat (.*?) dog
)
注意 :Rubyでは、DOTALL修飾子はm
、 Regexp::MULTILINE
修飾子 (例: /a.*b/m
)です。
注 :JavaScriptはDOTALL修飾子を提供しないため、a .
改行文字に一致させることは決してできません。同じ効果を達成するには、回避策が必要.
たとえば、すべてを代用してください.
[\S\s]
ようなキャッチオールキャラクタクラス、または何もないキャラクタクラス[^]
(ただし、このコンストラクタは他のすべてのエンジンによってエラーとして扱われるため、ポータブルではありません)。
マルチライン修飾子
もう1つの例は、 ^
と$
アンカーを行の開始/終了に一致させ、開始/終了を一致させないようにするMULTILINEモディファイアです(通常、 m
フラグを使用して表現されます(Oniguruma(例えばRuby)ではm
を使ってDOTALL修飾子を表します)全体の文字列の。
/^My Line \d+$/gm
My Line
で始まるすべての行を検索し、行末までスペースと1桁以上の数字を含みます。
インラインバージョン:( (?m)
(例:( (?m)^My Line \d+$
)
注記 :Oniguruma(Rubyなど)では、正規表現をサポートするほぼすべてのテキストエディタで、 ^
と$
アンカーはデフォルトで 行の開始/終了位置を示します 。文書全体/文字列開始を定義するには\A
を使用し、文書/文字列終了を示すには\z
を使用する必要があります。 \Z
と\z
の違いは、文字列の末尾にある最後の改行(LF)記号の前に一致することです(例: /\Astring\Z/
は"string\n"
一致し"string\n"
) Python、 \Z
動作は\z
と\z
アンカーには対応していません)。
IGNORE CASE修飾子
大文字小文字を無視するための共通修飾子は、 i
:
/fog/i
Fog
、 foG
などと一致します。
インラインバージョンの修飾子は、 (?i)
ようになり(?i)
。
ノート:
Javaでは、デフォルトで大文字と小文字を区別しない一致では、US-ASCII文字セット内の文字のみが一致しているとみなされます。 ユニコード対応の大文字と小文字を区別しない照合は、この( CASE_INSENSITIVE
)フラグとともにUNICODE_CASE
フラグを指定することで有効にできます 。 (例えば、 Pattern p = Pattern.compile("YOUR_REGEX", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
)。これに関する詳細は、Java RegExの大文字と小文字を区別しないマッチングで見つけることができます。また、 UNICODE_CHARACTER_CLASS
を使用して、一致するUnicodeを認識させることができます。
VERBOSE / COMMENT / IgnorePatternWhitespace修飾子
パターンの一部の中の空白を使用して読みやすくするための書式設定や、 #
:
/(?x)^ # start of string
(?=\D*\d) # the string should contain at least 1 digit
(?!\d+$) # the string cannot consist of digits only
\# # the string starts with a hash symbol
[a-zA-Z0-9]+ # the string should have 1 or more alphanumeric symbols
$ # end of string
/
文字列の例: #word1here
。 #
記号は、パターンの一部であるリテラル#
を示すためにエスケープされています。
正規表現パターンのエスケープされていない空白は無視され、エスケープしてパターンの一部にします。
通常、文字クラス( [...]
)内の空白は、Java以外のリテラル空白として扱われます。
また、PCRE、.NET、Python、Ruby Oniguruma、ICU、正規表現のフレーバで正規表現のパターンの中で(?#:...)
コメントを使用できることに言及する価値があります。
明示的キャプチャ修飾子
これはn
表される.NET正規表現固有の修飾子です。使用すると、 (\d+)
ような)無名のグループは捕捉されません。有効なキャプチャだけが明示的に名前を付けられたグループです(例: (?<name> subexpression)
)。
(?n)(\d+)-(\w+)-(?<id>\w+)
123-1_abc-00098
全体と一致しますが、 (\d+)
と(\w+)
は結果の一致オブジェクトにグループを作成しません。唯一のグループは${id}
です。 デモを参照してください。
ユニコード修飾子
UNICODE修飾子は、通常はu
(PHP、Python)またはU
(Java)で表され、正規表現エンジンはパターンと入力文字列をUnicode文字列とパターンとして扱い、 \w
、 \d
、 \s
Unicodeを認識します。
/\A\p{L}+\z/u
1つ以上のUnicode文字で構成される文字列と一致するPHPの正規表現です。 正規表現のデモを参照してください。
であることに注意してくださいPHP、 /u
修飾子は、 (をオンにしてUTF8文字列として文字列を処理するために、PCREエンジンができますPCRE_UTF8
(有効にすることによって動詞を)とUnicodeを意識したパターンでの速記文字クラスを作るPCRE_UCP
で詳細を参照、動詞をpcre.org ) 。
パターンと件名の文字列はUTF-8として扱われます。この修飾子はUnixではPHP 4.1.0以降、win32ではPHP 4.2.3から利用可能です。パターンと対象のUTF-8妥当性は、PHP 4.3.5からチェックされます。無効なサブジェクトは、preg_ *関数には何もマッチしません。無効なパターンはレベルE_WARNINGのエラーを引き起こします。 5オクテットと6オクテットのUTF-8シーケンスは、PHP 5.3.4以降無効と見なされます(PCRE 7.3 2007-08-28)。以前は有効なUTF-8とみなされていました。
Python 2.xでは、 re.UNICODE
はパターン自体にのみ影響を与えますre.UNICODE
\w
、 \W
、 \b
、 \B
、 \d
、 \D
、 \s
、 \S
はUnicode文字プロパティデータベースに依存します。
インラインバージョン: (?u)
Pythonで、 (?U)
のJavaインチ例えば:
print(re.findall(ur"(?u)\w+", u"Dąb")) # [u'D\u0105b']
print(re.findall(r"\w+", u"Dąb")) # [u'D', u'b']
System.out.println("Dąb".matches("(?U)\\w+")); // true
System.out.println("Dąb".matches("\\w+")); // false
PCRE_DOLLAR_ENDONLY修飾子
PCREに準拠したPCRE_DOLLAR_ENDONLY修飾子は$
アンカーを文字列の最後に一致させます ( 文字列の最後の改行の前の位置を除く)。
/^\d+$/D
等しい
/^\d+\z/
1桁以上の数字で構成され、 "123\n"
と一致しない文字列全体と一致しますが、 "123"
と一致します。
PCRE_ANCHORED修飾子
/A
修飾子で表現された別のPCRE準拠修飾子。 この修飾子が設定されている場合、パターンは強制的に「アンカー」されます。つまり、検索対象の文字列の先頭(「件名文字列」)にのみ一致するように制約されます。この効果は、Perlでそれを行う唯一の方法であるパターン自体の適切な構造によっても達成できます。
/man/A
〜と同じです
/^man/
PCRE_UNGREEDY修飾子
/U
表されるPCRE準拠のPCRE_UNGREEDYフラグ。 /a.*?b/U
= /a.*b/
パターンの中で貪欲さを/a.*b/
ます。
PCRE_INFO_JCHANGED修飾子
重複した名前付きグループの使用を許可するもう1つのPCRE修飾子。
注 : インラインバージョンのみがサポートされています - (?J)
、パターンの先頭に配置する必要があります。
使用する場合
/(?J)\w+-(?:new-(?<val>\w+)|\d+-empty-(?<val>[^-]+)-collection)/
"val"グループの値は決して空にはなりません(常に設定されます)。ブランチをリセットしても同様の効果が得られます。
PCRE_EXTRA修飾子
パターン内のバックスラッシュの後に特別な意味を持たない文字が続くと、エラーを引き起こすPCRE修飾子。デフォルトでは、バックスラッシュに続けて特殊な意味を持たない文字がリテラルとして扱われます。
例えば
/big\y/
bigy
とマッチする
/big\y/X
例外がスローされます。
インラインバージョン:( (?X)