正規表現

2463 ワード


個人研究の過程でずっと困っていた正規表現がまた私を探しに来た...😁👍
毎回cheat sheetを見て、整理したいので、この機会に整理したいと思います.
正規表現
本科の授業で初めて「automataと形式言語」の正規表現を聞いた.もちろん、Automataで使用される正規表現は非常に細かく異なりますが、深く勉強していないために生じた背景は脈々と受け継がれている可能性があると信じています.正規言語を含むコンテキストフリー言語も実際にはプログラミング言語の基礎である.
基本的に、機器は、データを処理する際に、所定の入力に対する適切な出力を吐き出すシステムである.異なる入力フォーマット(正確には約束のアルファベット)Σ 表示可能な任意の形状)は、予め対応可能であり、処理する形状を正規表現として約定する必要がある.
簡単に言えば、正規表現を使用して、入力値としての文字列の特徴とモードをマッチングします.
今回の研究では,入力データをグループ化して正規表現を用い,Pythonを用いるとsplit法が正規表現を用いた典型的な例である.
実際、グループ化操作では、正規表現がよく使用されます.
プロジェクト
^x
 문자열의 시작을 표현하며 x 문자로 시작됨을 의미한다.
x$
 문자열의 종료를 표현하며 x 문자로 종료됨을 의미한다.
.x
 임의의 한 문자의 자리수를 표현하며 문자열이 x 로 끝난다는 것을 의미한다.
x+
 반복을 표현하며 x 문자가 한번 이상 반복됨을 의미한다.
x?
 존재여부를 표현하며 x 문자가 존재할 수도, 존재하지 않을 수도 있음을 의미한다.
x*
 반복여부를 표현하며 x 문자가 0번 또는 그 이상 반복됨을 의미한다.
x|y
 or 를 표현하며 x 또는 y 문자가 존재함을 의미한다.
(x)
그룹을 표현하며 x 를 그룹으로 처리함을 의미한다.
(x)(y)
그룹들의 집합을 표현하며 앞에서 부터 순서대로 번호를 부여하여 관리하고 x, y 는 각 그룹의 데이터로 관리된다.
(x)(?:y)
그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음을 의미한다. 
x{n}
 반복을 표현하며 x 문자가 n번 반복됨을 의미한다.
x{n,}
 반복을 표현하며 x 문자가 n번 이상 반복됨을 의미한다.
x{n,m}
 반복을 표현하며 x 문자가 최소 n번 이상 최대 m 번 이하로 반복됨을 의미한다.
次の[]は特殊な表現で、カッコ内の文字セグメントを選択することを意味します.
[xy]
문자 선택을 표현하며 x 와 y 중에 하나를 의미한다.
[^xy]
not 을 표현하며  x 및 y 를 제외한 문자를 의미한다.
[x-z]
range를 표현하며 x ~ z 사이의 문자를 의미한다. 
\^
escape 를 표현하며 ^ 를 문자로 사용함을 의미한다.
\b
word boundary를 표현하며 문자와 공백사이의 문자를 의미한다.
\B
non word boundary를 표현하며 문자와 공백사이가 아닌 문자를 의미한다.
\d
digit 를 표현하며 숫자를 의미한다. 
\D
non digit 를 표현하며 숫자가 아닌 것을 의미한다. 
\s
space 를 표현하며 공백 문자를 의미한다. 
\S
non space를 표현하며 공백 문자가 아닌 것을 의미한다.
\t
tab 을 표현하며 탭 문자를 의미한다.
\v
vertical tab을 표현하며 수직 탭(?) 문자를 의미한다.
\w
word 를 표현하며 알파벳 + 숫자 + _ 중의 한 문자임을 의미한다. 
\W
non word를 표현하며 알파벳 + 숫자 + _ 가 아닌 문자를 의미한다. 
ただし、Automata正規構文にも優先型、左旋型の構文しか含まれないように、正規表現は線形文字列を同時に含むルールを生成できないようです.
("", "a", "ab", "aab"...) すべての式が含まれていても、左側の文字列のみを表す表現は存在しません.実際,正規表現では1つのスタックしか使用できない構造であり,コンテキスト自由文法でのみ2つのスタックを使用できる.
代表的な使用
携帯番号
/^01([0|1|6|7|8|9])-?([0-9]{3,4})-?([0-9]{4})$/
/^:開始
グループ化
|:1つ含む必要があります
[]:いずれか
[0-9]:0-9を選択
{3,4}:3または4回繰り返す
$/:終了
電子メール
/^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i
[0-9 a-zA-Z]:数字またはアルファベットで始まる
(複数の記号があるか、そうでないか、数字やアルファベットの大文字と小文字がある)繰り返し
後のフォーマットも同じです