文法|通常
正規表現 (RE) は、少数の人しか理解できない謎の言語であると誤解されることがよくあります。表面的には乱雑に見えますが、構文を知らなければ、コードはテキストのゴミの塊のように見えるでしょう。実際、正規表現は非常に単純で理解できるものです。この記事を読むと、正規表現の一般的な構文を理解できるようになります。
複数のプラットフォームをサポート
正規表現は、1956 年に数学者の Stephen Kleene によって初めて提案されました。彼は、自然言語に関する段階的な研究の結果に基づいてそれを提案しました。完全な構文を持つ正規表現は文字形式のマッチングに使用され、後に融合情報技術の分野に適用されました。それ以来、正規表現はいくつかの期間にわたって進化し、現在の標準は ISO (国際標準化機構) によって承認され、Open Group によって承認されました。
正規表現は特別な言語ではありませんが、ファイルまたは文字内のテキストを検索して置換するための標準です。基本正規表現 (BRE) と拡張正規表現 (ERE) という 2 つの標準があります。 ERE には、BRE 機能とその他の概念が含まれています。
正規表現は、xsh、egrep、sed、vi、UNIX プラットフォーム上のプログラムなど、多くのプログラムで使用されます。これらは HTML や XML などの多くの言語で採用されており、通常、これらの採用は標準全体のサブセットにすぎません。
それはあなたが思っているよりも一般的です
クロスプラットフォームのプログラミング言語に移植された正規表現の開発により、その機能はますます完成し、その使用はますます広まっています。インターネット上の検索エンジンや電子メール プログラムでも使用されており、UNIX プログラマーでなくても、ルール言語を使用してプログラムを簡素化し、開発時間を短縮できます。
正規表現 101
多くの正規表現の構文は非常に似ていますが、それは、これまで学習したことがないからです。ワイルドカードは RE の構造タイプであり、反復操作です。まず、ERE 標準の最も一般的な基本構文タイプを見てみましょう。具体的な使用例を提供できるようにするために、いくつかの異なるプログラムを使用します。
文字マッチング
正規表現の鍵は、一致を検索する対象を決定することです。この概念がなければ、Res は役に立ちません。
表 A に示すように、各式には、見つける必要がある命令が含まれています。
表 A: 文字に一致する正規表現
操作
説明
例
結果
.
任意の 1 文字に一致
grep .ord sample.txt
「ford」、「lord」、「2ord」などに一致します. ファイルsample.txt.
[ ]
括弧内にリストされている任意の 1 文字と一致します
grep [cng]ord sample.txt
「cord」、「nord」、および「gord」のみと一致します
[^ ]
括弧内にリストされていない任意の 1 文字と一致します
grep [^cn]ord sample.txt
「lord」、「2ord」などには一致しますが、「cord」や「nord」には一致しません
grep [a -zA-Z]ord sample.txt
「aord」、「bord」、「Aord」、「Bord」などに一致します
grep [^0-9]ord sample.txt
「Aord」に一致します”、”aord” などですが、”2ord” などはありません。
繰り返し演算子
繰り返し演算子、または量指定子は、特定の文字を検索する回数を表します。これらは、複数行にまたがる文字を検索するために文字マッチング構文でよく使用されます (表 B を参照)。
表 B: 正規表現の反復演算子
操作
説明
例
結果
?
任意の文字が存在する場合、1 回一致します
egrep “?erd” sample.txt
「berd」、「herd」と一致します、などと「erd」
*
宣言された要素が存在する場合、複数回一致します
egrep “n.*rd” sample.txt
「nerd」、「nrd」、「neard」などと一致します
+
宣言された要素に 1 回以上一致します
egrep “[n]+erd” sample.txt
“nerd”、“nnerd” などには一致しますが、“erd” には一致しません
{n}
宣言された要素に正確に一致しますn 回
egrep 「[a-z]{2}erd」sample.txt
「cherd」、「blerd」などには一致しますが、「nerd」、「erd」、「buzzerd」などには一致しません
{n, }
宣言された要素と少なくとも n 回一致します
egrep “.{2,}erd” sample.txt
“cherd” と “buzzerd” には一致しますが、“nerd” には一致しません
{n,N}
宣言された要素と一致します最低 n 回、ただし N 回を超えない
egrep “n[e]{1,2}rd” sample.txt
“nerd” と “neerd” に一致します
anchor
anchor は、必要な形式を指します図 C に示すように、 match 。一般的な文字の組み合わせを見つけるのに使用してください。たとえば、vi 行エディターのコマンド s を使用して、置換を表します。このコマンドの基本構文は次のとおりです。
^
行頭と一致します
s/^/blah /
行頭に「blah」を挿入します
$
行末に一致
s/$/ blah/
行末に「blah」を挿入します
<
単語の先頭に一致します
s/ 「blah」を挿入します単語の先頭に一致
egrep “
>
単語の末尾に一致
s/>/blah/
を挿入単語の最後にある blah"
egrep ">blah" sample.txt
"soupblah" などに一致します
b
単語の先頭または末尾に一致します
egrep "bblah" sample.txt
「blahcake」および「countblah」と一致します
B
単語の途中で一致します
egrep「Bblah」sample.txt
「sublahper」などと一致します
Interval
Res で利用可能な別のものはスペーサー (またはキャレット) 記号です。実際、この記号は OR ステートメントと同等であり、 | 記号を表します。次のステートメントは、sample.txt ファイル内の「nerd」と「merd」のハンドルを返します:
egrep "(n|m)erd" sample.txt
interval 関数は、特に次の情報を探している場合に非常に強力です。時間のスペルが異なるファイルでも同じ結果が得られますが、次の例でも同じ結果が得られます:
egrep "[nm]erd" sample.txt
この関数の真の有用性は、interval 関数をRes Reflected の高度な機能。
いくつかの予約文字
Res の最後で最も重要な機能は予約文字 (特定文字とも呼ばれます) です。たとえば、文字「ne*rd」と「ni*rd」を検索したい場合、パターン マッチング ステートメント「n[ei]*rd」は「neeeeerd」と「nieieerd」に一致しますが、探しているものではありません。キャラクターのため。 「*」 (アスタリスク) は予約文字であるため、バックスラッシュ記号、つまり「n[ei]*rd」に置き換える必要があります。その他の予約文字には、
^ (カラット)
(ピリオド)
[ (左括弧}
$ (ドル記号)
( (左括弧)
) (右括弧)
| (パイプ)
* (アスタリスク) があります。
+ (プラス記号)
? (疑問符)
{ (左中括弧、または左中括弧)
バックスラッシュ
上記の文字を文字検索に含めると、Res が非常に難しくなるのは間違いありません。 , 次の PHP の eregi 検索エンジン コードは読みにくいです
eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a. -z0-9- ]+(.[a-z0-9-]+)*$",$sendto)
ご覧のとおり、プログラムの意図を把握するのは困難です。しかし、予約文字を脇に置いておけば、多くの場合、理解することができます。コードの意味を誤解しています。
概要
この記事では、正規表現を分かりやすく説明し、ERE 標準の一般的な構文をリストしました。Open Group のルールの詳細な説明を参照するには、次を参照してください。 Expressions については、ディスカッション エリア