コンテンツにスキップ

正規表現

出典: フリー百科事典『ウィキペディア(Wikipedia)』

: regular expression使[1][2]



使



使grep, AWK, sed, Perl, Tcl, lex 

使POSIX

[]



形式的な説明[編集]


 

  

   

  
   

    

   0  



:

   

    

    

[]


使

HandelHendelHaendel3H(e|ae?)ndel3



gray|greygraygreygr(a|e)y



gr(a|e)y(a|e)aegraygrey



使?*+
?

01colou?rcolorcolour

*

0go*glegooglegogleggle

+

1go+glegooglegogleggle

使

[]


201950

UnixQEDUNIXedgrepUnix expr, awk, Emacs, vi, lex, Perl 

PerlTcl()PerlPerlPerl Compatible Regular Expressions (PCRE) PHPApache使

RakuParsing Expression GrammarRaku使Perl 6 rules

便

RakuPerlsubpatternPHP, Perl, Pythonregex, Ruby 

[]

[]


UNIXPOSIX3[ 1][ 2][ 3]

[]


SRE[ 4]regexp.h[3]

[]


BRE[ 5] UNIXgrepsed[4]

aa(bc(bc
正規表現 マッチする対象
. 任意の1文字にマッチする。
[…] 括弧内に含まれる1文字にマッチする。例えば、正規表現「[abc]」は1文字「a」「b」「c」にマッチする。正規表現「[a-z]」は全ての英小文字の1文字にマッチする。これらは混ぜることができる。「[abcq-z]」は1文字「a」「b」「c」「q」「r」「s」「t」「u」「v」「w」「x」「y」「z」にマッチし、正規表現「[a-cq-z]」も同様である。正規表現中の「-」は括弧内の最初か最後にあるときのみ、リテラルとして扱われる。例えば正規表現「[abc-]」や正規表現「[-abc]」は1文字「a」「b」「c」「-」にマッチする。1文字「]」自身にマッチさせる最も手っ取り早い方法は、囲んでいる括弧内で、括弧が最初になるようにすることである。例えば正規表現「[][ab]」は1文字「]」「[」「a」「b」にマッチする。
[^…] 括弧内に含まれない1文字にマッチする。例えば正規表現「[^abc]」は「a」「b」「c」以外の任意の文字にマッチする。正規表現「[^a-z]」は英小文字以外の任意の1文字にマッチする。上と同様にこれらは混ぜることができる。
^ 行の最初にマッチする。
$ 行の最後にマッチする。
\(…\) これに囲まれた表現は、後方で呼び出すことができる。次の \1, …, \9 の項を参照のこと。
  • \1
  • \2
  • \3
  • \4
  • \5
  • \6
  • \7
  • \8
  • \9
それぞれ「\(」と「\)」で囲まれた部分に先行してマッチした1 - 9 番目の文字列と同じ文字列パターンにマッチする。この機能は理論的には、言うならば非正規で(正規言語の記述力を超える)、POSIX拡張正規表現では採用されていない。
*
  • 1文字に続く「*」は0回以上の表現の繰り返しにマッチする。例えば「[xyz]*」は空文字列や文字列「x」「y」「zx」「zyx」などにマッチする。
  • n を1から9までの数字としたとき、基本正規表現「\n*」は「\(」と「\)」で囲まれた部分の0回以上の繰り返しにマッチする。例えば、基本正規表現「\(a.\)c\1*」 は文字列「abcab」 「abcabab」「abcababab」などにマッチするが、文字列「abcac」にはマッチしない。
  • \(」と「\)」で囲まれた表現に続く「*」は無効とされる。しかし、一部の環境ではそうならない。
\{m,n\} 直前のブロックの m 回以上 n 回以下の繰り返しにマッチする。例えば、正規表現「a\{3,5\}」は文字列「aaa」「aaaa」「aaaaa」にマッチする。

grep\|



.athatcat5at3

[hc]athatcat

[^b]atbat.at

^[hc]athatcat

[hc]at$hatcat

sztuvwxy[a-z][ 6]POSIX 
POSIX クラスを用いた正規表現[注 7] 対応する表現 意味
[[:upper:]] [A-Z] 英語の大文字
[[:lower:]] [a-z] 英語の小文字
[[:alpha:]] [A-Za-z] 英語のアルファベット
[[:alnum:]] [A-Za-z0-9] アラビア数字と英語のアルファベット
[[:digit:]] [0-9] アラビア数字
[[:xdigit:]] [0-9A-Fa-f] 16進数字
[[:punct:]] [.,!?:...] 英語の句読点
[[:blank:]] [ \t] (半角の)スペースタブ
[[:space:]] [ \t\n\r\f\v] (半角の)空白
[[:cntrl:]] 制御文字
[[:graph:]] [^ \t\n\r\f\v[:cntrl:]] 印字文字
[[:print:]] [^\t\n\r\f\v[:cntrl:]] 印字文字とスペース

:[[:upper:]ab]AZab1

使POSIX [:word:][:word:][:alnum:]使

[]


ERE[ 8] UNIX-E使[5]

POSIX UNIX 
基本正規表現 拡張正規表現
(対応なし) +
(対応なし) ?
(対応なし) |
\{…\} {…}
\(…\) (…)
( \(
) \)
[ \[
] \]
. \.
* \*
? \?
+ \+
^ \^
$ \$

a\.(\(|\))a.)a.(

GNU Emacs[]


GNU findfindutils-4.2.28

GNU Emacs Manual - Regexps

Perl[]


PerlPOSIXPOSIXPerl*a.*b.*a bad dabPerl使a.*?b.*?a bad daba b

Perl
メタ文字 マッチする対象
\d アラビア数字、つまり「[0-9]
\D アラビア数字以外の文字、つまり「[^\d]
\w アルファベット、アラビア数字またはアンダーバー、つまり「[a-zA-Z_0-9]」(ロケールに依存し、例えばウムラウト付き文字などの扱いが変わる)
\W アルファベット、数字やアンダーバー以外の文字、つまり「[^\w]
\s 空白文字、つまり「[ \t\n\r\f]」(ASCII文字集合の場合)
\S 空白文字以外の文字、つまり、[^\s]

PerlJavaPatternPythonRubyPerlPerl Compatible Regular Expressions (PCRE) Perl

[]


使

PCRE

PerlEximApachePostfix[6]



Ruby1.9PHP5macOSOgreKitOniguruma Regular Expression Framework for Cocoa[7]



Perl 5.10Ruby 2.0[8]

re2

PCREGoogle

GNU Regex

GNU CUnix

Boost.Regex

Boost C++Perl使[9]POSIXECMAScript[10]C++11Boost.Regex[11][12][13][14]

[]

注釈[編集]

  1. ^ : historical
  2. ^ : legacy
  3. ^ : may be withdrawn
  4. ^ : simple regular expressions
  5. ^ : basic regular expression
  6. ^ これは正規表現として「[a-z]」を使用していたことが原因である。
  7. ^ 所定の文字列を内側の括弧およびコロンで囲って「POSIX クラスを表現」し、外側の括弧は「その1字のみからなる正規表現を記述」している。
  8. ^ : extended regular expression

出典[編集]

  1. ^ J. ホップクロフト、R. モトワニ、J. ウルマン『オートマトン言語理論 計算論 I 第2版』サイエンス社、2003年。ISBN 9784781910260 
  2. ^ 中村克彦『コンピュータとは何か?』東京電機大学出版局、2018年、156頁。"多くの文献では正則表現または正規表現と呼んでいるが、数学では“regular”の訳語として「正則」を当てるのが一般的であり、“expression”は算術式や論理式と同様に「式」と呼ぶべきである"。 
  3. ^ POSIX > XSH > regexp(3)
  4. ^ POSIX > Base Definitions > Regular Expressions > Basic Regular Expressions
  5. ^ POSIX > Base Definitions > Regular Expressions > Extended Regular Expressions
  6. ^ PCRE - Perl Compatible Regular Expressions
  7. ^ https://github.com/kkos/oniguruma
  8. ^ https://github.com/k-takata/Onigmo
  9. ^ Perl Regular Expression Syntax - 1.81.0
  10. ^ syntax_option_type Synopsis - 1.81.0
  11. ^ <regex> - cplusplus.com
  12. ^ Regular expressions library (since C++11) - cppreference.com
  13. ^ 正規表現ライブラリ - cppreference.com
  14. ^ regex - cpprefjp C++日本語リファレンス

参考文献[編集]


Jeffrey E.F. Friedl119994ISBN 4-900900-45-1 
Jeffrey E.F. Friedl220035ISBN 4-87311-130-7 

Jeffrey E.F. Friedl320084ISBN 978-4-87311-359-3https://www.oreilly.co.jp/books/9784873113593/ 

Jan GoyvaertsSteven Levithan20104ISBN 978-4-87311-450-7https://www.oreilly.co.jp/books/9784873114507/ 

[]

  • 正規表現メモ - sed, grep, perl など様々なソフトの正規表現がまとめられている。