正規表現をマスターする:実際の例を含む実践的なガイド
正規表現とは何ですか?
正規表現 (正規表現とも呼ばれます) は、文字列内の特定の文字または単語を検索するために使用できるパターンを定義することによって機能します。
使用するパターンを定義したら、編集を行ったり、特定の文字や単語を削除したり、あるものを別のものに置き換えたり、その特定のパターンを含むファイルや文字列から関連情報を抽出したりすることができます。
正規表現を学ぶ必要がある理由
正規表現を使用すると、時間を大幅に節約できる方法でテキスト処理を行うことができます。また、その過程で楽しみが生まれることもあります。
正規表現を使用すると、情報の検索がはるかに簡単になります。ターゲットが見つかったら、バッチ編集/再プレート/削除など必要な処理を行うことができます。
正規表現を使用する実際の例としては、バッチ ファイルの名前変更、ログの解析、フォームの検証、コードベースでの一括編集、再帰的検索などがあります。
このチュートリアルでは、このサイトの助けを借りて正規表現の基本について説明します。後ほど、Python を使用して解決する正規表現の課題をいくつか紹介します。 sed などのツールの使用方法も説明します。 と grep 正規表現を使用します。
人生の多くのことと同様、正規表現も実際にやってみないと理解できないものの 1 つです。この記事を読み進める際には、正規表現を試してみることをお勧めします。
目次
- 正規表現の基本
- 完全一致
- 文字セット
- 正規表現で範囲を一致させる
- セットにない任意の文字と一致します
- 文字クラス
- 量指定子
- キャプチャグループ
- 正規表現で論理 OR を使用する方法
- キャプチャ グループを参照する方法
- キャプチャ グループに名前を付ける方法
- コマンドラインツールで正規表現を使用する方法
- grep を使用した再帰的正規表現検索
- sed での置換
- 高度な正規表現:ルックアラウンド
- 後読み
- 先読み
- 正規表現の実践例
- ログの解析
- ファイル名の一括変更
- メールの検証
- パスワードの制約
- 最後の言葉
正規表現の基本
正規表現は、パターンに一致する一連の文字にすぎません。リテラル文字 (「abc」など) の使用に加えて、特別な目的を持つメタ文字 (*、+、? など) がいくつかあります。正規表現を簡素化するのに役立つ文字クラスなどの機能もあります。
正規表現を作成する前に、探しているパターンのすべての基本的なケースと特殊なケースについて学ぶ必要があります。
たとえば、「Hello World」と一致させたい場合、その行を「Hello」で始めますか、それとも何でも始めてもよいでしょうか? 「Hello」と「World」の間にはスペースを 1 つだけ入れますか、それとももっと入れてもよいですか?他の文字を「World」の後に来ることはできますか、それとも行をそこで終了する必要がありますか?大文字と小文字の区別を気にしますか?などなど。
これらは、正規表現を作成する前に答えを知っておく必要がある種類の質問です。
完全一致
正規表現の最も基本的な形式には、テキスト エディタで Ctrl-F を使用して行うのと同様の方法で、一連の文字を照合することが含まれます。
上部には一致の数が表示され、下部には正規表現が文字ごとに一致するものについての説明が表示されます。
文字セット
正規表現文字セットを使用すると、文字グループの任意の 1 文字と一致させることができます。グループは角括弧 [] で囲まれます。
例:t[ah]i 「tai」と「thi」に一致します。ここで「t」と「i」は固定されていますが、それらの間に「a」または「h」が出現する可能性があります。
正規表現での範囲の一致
場合によっては、英大文字など、本質的に連続する文字のグループと一致させたい場合があります。しかし、26 通の手紙をすべて書くのは非常に面倒です。
正規表現は範囲を使用してこの問題を解決します。 「-」は範囲演算子として機能します。いくつかの有効な範囲を以下に示します。
範囲一致 [A-Z]大文字[a-z]小文字[0-9]任意の数字
[b-e] など、部分的な範囲を指定することもできます。 「bcde」または [3-6] のいずれかの文字と一致する 数値「3456」のいずれかと一致します。
文字セット内の範囲を 1 つだけ指定するという制限はありません。複数の範囲を使用したり、他の追加の文字と組み合わせたりすることもできます。ここでは、[3-6u-w;] 「3456uvw」またはセミコロン「;」のいずれかと一致します。
セットにない任意の文字と一致します
セットの先頭に「^」を付けると、逆の演算が実行されます。たとえば、[^A-Z0-9] 大文字と数字以外のものと一致します。
キャラクタークラス
正規表現を作成する際、同じ式内で数字などの特定のグループを頻繁に、また複数回一致させる必要があります。
たとえば、「文字-数字-文字-数字」のようなパターンと一致するにはどうすればよいでしょうか?
これまでに学んだことから、[a-zA-Z]-[0-9]-[a-zA-z]-[0-9] を思いつくことができます。 。これは機能しますが、パターンの長さが長くなると式が非常に複雑になることがわかります。
式を簡単にするために、クラスは数字などの明確に定義された文字グループに割り当てられています。次の表は、これらのクラスと、文字セットを使用した同等の式を示しています。
ClassMatchesEquivalent 式 .改行を除くすべて[^\n\r]\wword 文字[a-zA-Z0-9_]\Wnon-word 文字[^\w]\ddigits[0-9]\Dnon-digits[^\d]\sspace、tab、newlines[ \t\r\n\f]\Snon 空白文字[^\s]文字クラスは非常に便利で、式をよりきれいにします。このチュートリアル全体でこれらを広範囲に使用するため、この表を参照点として使用し、クラスを忘れた場合はここに戻ってきてください。
ほとんどの場合、パターン内のすべての位置は気にしません。 「。」クラスを使用すると、セット内のすべての可能な文字を記述する必要がなくなります。
たとえば、t.. t で始まるものとその後の 2 文字に一致します。これは SQL LIKE を思い出させるかもしれません。 t%% を使用する演算子 同じことを達成するために。
数量指定子
「パターン」と「繰り返し」という言葉は密接に関連しています。 3 桁の数字と一致させたい場合は、\d\d\d を使用できます。 。しかし、11 桁を照合する必要がある場合はどうすればよいでしょうか? '\d' は 11 回書くこともできますが、正規表現を書いたり、何らかのプログラミングを行う際の一般的な経験則として、何かを 2 回以上繰り返している場合は、おそらく何らかの機能に気づいていない可能性があります。
正規表現では、この目的のために量指定子を使用できます。 11 桁を照合するには、式 \d{11} を記述するだけです。 .
以下の表は、正規表現で使用できる量指定子のリストです。
QuantifierMatches *0 以上?0 または 1+1 以上{n}ちょうど n 回{n, }n 回以上{n, m}n 回から m 回まで
この例では、式 can\s+write は can に一致します その後に 1 つ以上の空白、その後に write が続きます 。ただし、「canwrite」が \s+ と一致しないことがわかります。 少なくとも 1 つの空白が一致する必要があることを意味します。これは、トリミングされていないテキストを検索するときに便利です。
can\s?write は何かわかりますか? 一致しますか?
キャプチャ グループ
キャプチャ グループは括弧 () で囲まれた部分式です。キャプチャ グループはいくつでも作成でき、ネストされたキャプチャ グループも作成できます。
式 (The ){2} 「The 」に 2 回一致します。ただし、キャプチャ グループがない場合、式 The {2} は は、量指定子がグループとしての「The 」ではなくスペース文字に適用されるため、「The」の後に 2 つのスペースが続くものと一致します。
有効な正規表現の場合と同様に、キャプチャ グループ内の任意のパターンと一致させることができます。ここでは (is\s+){2} 「is」の後に 1 つ以上のスペースが 2 回続く場合に一致します。
正規表現で論理 OR を使用する方法
「|」を使用できます。複数のパターンを照合します。 This is (good|bad|sweet) 「This is 」の後に「good」、「bad」、「sweet」のいずれかが続くものと一致します。
ここでもキャプチャ グループの重要性を理解する必要があります。 This is good|bad|sweet という式が何であるかを考えてください。 一致しますか?
キャプチャ グループの場合、good|bad|sweet This is から分離されています 。ただし、キャプチャ グループ内にない場合、正規表現全体は 1 つのグループにすぎません。したがって、式 This is good|bad|sweet は 文字列に「これは良い」、「悪い」、または「甘い」が含まれている場合に一致します。
キャプチャ グループを参照する方法
キャプチャ グループは、同じ式内で参照することも、[置換] タブに表示されているように置換の実行中に参照することもできます。
ほとんどのツールと言語では、「\n」を使用して n 番目にキャプチャされたグループを参照できます。このサイトでは、置換を参照するときに「$n」を使用します。置換の構文は、使用しているツールまたは言語によって異なります。たとえば、JavaScript の場合は「$n」ですが、Python の場合は「\n」です。
式 (This) is \1 power 内 、「This」はキャプチャされ、「\1」で参照され、実質的に This is This power と一致します。 .
キャプチャ グループに名前を付ける方法
キャプチャ グループには構文 (?<name>pattern) を使用して名前を付けることができます。 \k<name> を使用して同じ式でそれらを後方参照します。 。
置換の際、参照は $<name> によって行われます。 。これは JavaScript の構文であり、言語によって異なる場合があります。違いについてはここで学ぶことができます。また、この機能は一部の言語では利用できない場合があることにも注意してください。
式 (?<lang>[\w+]+) is the best but \k<lang> .* 内 、パターン [\w+]+ 「lang」という名前でキャプチャされ、\k<lang> で後方参照されます。 。このパターンは、任意の単語文字または「+」文字と 1 回以上一致します。 .* 正規表現の末尾にある は、任意の文字に 0 回以上一致します。そして最後に置換の際、参照は $<lang> によって行われます。 .
ターミナルから正規表現を実行できる優れた CLI ツールが利用可能です。これらのツールを使用すると、言語でコードを作成してコンパイルしたり解釈したりすることなく、さまざまな正規表現を簡単にテストできるため、さらに時間を節約できます。
よく知られているツールには、grep、sed、awk などがあります。これらのツールをどのように活用できるかについてのアイデアを得るために、いくつかの例を見てみましょう。
grep を使用した再帰的正規表現検索
grep を通じて正規表現の機能を実行できます。 grep では、ファイル内のパターンを検索したり、再帰的検索を実行したりできます。
Windows を使用している場合は、winget を使用して grep をインストールできます。 PowerShell で次のコマンドを実行します。
winget install -e --id GnuWin32.Grep
私の大学の CTF コンテスト用に作成した課題の解決策を紹介します。
チャレンジに添付されたファイルは、複数のレベルのディレクトリと多数のファイルを含む zip ファイルです。コンテストの名前は Coderush で、フラグ形式は coderush{flag is here} でした。 。したがって、パターン coderush{.*} を検索する必要があります。 これはフラグ形式 coderush{any character here} に一致します。 .
unzip ripG.zip でファイルを解凍します。 cd ripG を使用してそれに cd します。 .
358 個のディレクトリと 8731 個のファイルがあります。ファイル内のパターンを 1 つずつ検索する代わりに、次のように grep を使用できます。
grep --color -R "coderush{.*}"
「-R」フラグは再帰的検索を有効にします。
grep とそのコマンドライン オプションの詳細については、こちらをご覧ください。
sed による置換
sed を使用すると、正規表現を指定してテキスト ファイルの挿入、削除、置換を実行できます。 Windows を使用している場合は、ここから sed を入手できます。または、WSL を使用している場合は、grep や sed などのツールがすでに利用可能になっています。
これは sed の最も一般的な使用法です。
sed 's/pattern/replacement/g' filename
echo "${text}" | sed 's/pattern/replacement/g'
ここでは、すべての出現箇所を置き換えるためにオプション「g」が指定されています。
その他の便利なオプションは -n です。 すべての行を印刷するデフォルトの動作を抑制し、g の代わりに p を使用して正規表現の影響を受ける行のみを印刷します。
texts.txt の内容を見てみましょう。
Hello rand chars World 56 rand chars
Henlo 52 rand chars W0rld rand chars
GREP rand chars Henlo 62 rand chars
Henlo 10 rand chars Henlo rand chars
GREP rand chars Henlo 45 rand chars
私たちのタスクは Henlo number を置き換えることです。 Hello number を使用 「GREP」が存在する行のみ。したがって、パターン Henlo ([0-9]+) を検索しています。 これは、「Henlo 」の後に 1 つ以上の数字が続くものと一致し、すべての数字がキャプチャされます。この場合、置換文字列は Hello \1 になります。 – 「\1」は、数字を含むキャプチャ グループを参照しています。
これを実現する 1 つの方法は、grep を使用して「GREP」が存在する行を grep し、sed で置換を実行することです。
grep "GREP" texts.txt | sed -En 's/Henlo ([0-9]+)/Hello \1/p'
「-E」オプションを使用すると、括弧をエスケープする必要がある拡張正規表現が有効になります。
あるいは、単に sed を使用することもできます。 /pattern/ を使用してください パターンが存在する行のみに置換を制限します。
sed -En '/GREP/ s/Henlo ([0-9]+)/Hello \1/p' texts.txt
高度な正規表現:ルックアラウンド
先読みと後読み (合わせてルックアラウンドとして知られています) は、一致にパターンを含めずにパターンの存在を確認できる正規表現の機能です。
これらはゼロ幅アサーションと考えることができます。これらはパターンの存在を主張しますが、一致内の文字を消費しません。これらは非常に強力な機能ですが、計算コストも高くなります。したがって、頻繁に使用する場合は、パフォーマンスに常に注意してください。
後読み
「linux」という単語を一致させたいとしますが、条件が 2 つあるとします。
<オル>linux のみに一致させたい 他には何もありません。
最初の条件を満たす方法はすでにわかっています。 GNU.* 「GNU」の後に任意の数の文字が続くものと一致します。次に、最後に単語 linux と一致します。 。これは GNU-any-characters-linux のすべてに一致します。 .
しかし、GNU.* との一致を防ぐにはどうすればよいでしょうか? 最初の条件を維持しながら?
ここで、ポジティブ後読みが登場します。 ?<= というプレフィックスを付けることで、キャプチャ グループをポジティブ後読みとしてマークできます。 。この例では、式は (?<=GNU.*)linux になります。 .
現在は linux のみです は一致しますが、それ以外は一致しません。
式 (?<=GNU.*)linux に注意してください。 と linux(?<=GNU.*) まったく同じように動作します。 2 番目の式では、linux ですが、 後読みの前に、.* があります。 linux に一致する「GNU」の後 。これは、後読みを満たしていることを意味します。
わかりやすくするために、後読みなしでパターンを考えてみましょう。パターン GNU.* 「GNU」とその後のすべてに一致します。この場合は linux に一致します。 .
これで、式 (?<=C)X という一般化されたステートメントを導き出すことができます。 パターン X と一致します。パターン C が X の前にある場合のみです (また、C が一致に含まれていてはなりません)。
最初の条件を逆にすることもできます。 linux という単語を含む行に一致します GNU の場合のみ それ以前には一度も来なかった。これを否定後読みといいます。この場合のプレフィックスは ?<! です。 。前の式の逆は (?<!GNU.*)linux になります。 .
先読み
前の例で見たように、先読みは後読みと同様のアサーションでもあります。唯一の違いは、後読みは前にアサーションを行うのに対し、先読みは後にアサーションを行うことです。
次の 2 つの条件があるとします。
<オル>Hello と一致 World の場合のみ
肯定的な先読みのプレフィックスは ?= です。 。式 Hello(?=.*World) 両方の条件を満たすことになります。これは Hello.*World に似ています。 Hello のみを除く Hello.*World の場合は一致します 'Hello'、'World'、およびその間のものに一致します。
肯定的な後読みの例と同様に、式 Hello(?=.*World) および (?=.*World)Hello は同等です。 .* なので 「World」が Hello と一致する前 、最初の条件を満たしています。
否定先読みは、否定後読みを補完するものにすぎません。 ?! をプレフィックスとして付けることで使用できます。 。 (?!World)Hello Hello と一致します World がない場合のみ その後の任意の場所。
以下は、パターン X をアサーション C と照合する場合の回避のための構文の概要です。
OperationRegEx ポジティブ先読み(?=C)X 負の先読み(?!C)X ポジティブ後読み(?<=C)X 負の後読み(?<!C)X ログの解析
このログ ファイルで、以下が注目する行です。
[1/10000] Train loss: 11.30368, Valid loss: 8.95446, Elapsed_time: 7.58941
[500/10000] Train loss: 0.96180, Valid loss: 0.20098, Elapsed_time: 82.48651
[1000/10000] Train loss: 0.04051, Valid loss: 0.11927, Elapsed_time: 156.86243
私たちのタスクは、エポックにわたる損失のプロットなどの目的で、トレーニング損失と検証損失を抽出することです。 11.30368, 0.96180, 0.04051 のようなトレーニング損失値を抽出する必要があります。 それらを配列に入れます。
関連する値にはすべて「Train loss:」というプレフィックスが付きます。 ' なので、これを正規表現でそのまま使用できます。浮動小数点数を照合するには、いくつかの数字の後に「.」が続く必要があります。 " の後にさらに数字が続きます。 \d+\.\d+ を使用してこれを行うことができます。 。これらの数値を追跡したいため、これらの数値はキャプチャ グループ内に存在する必要があります。
「。」として正規表現では、「.」と一致させたい場合に特別な目的があります。文字をバックスラッシュでエスケープする必要があります。これは、特別な目的を持つすべてのキャラクターに適用されます。ただし、文字セット内でエスケープする必要はありません。
まとめると、トレーニング損失を抽出する式は Train loss: (\d+\.\d+) になります。 。同じロジックを使用して、Valid loss: (\d+\.\d+) で検証損失を抽出できます。 .
Python を使用してこの情報を抽出する 1 つの方法は次のとおりです。
import re
f = open("log_train.txt", "r").read()
train_loss = re.findall(r'Train loss: (\d+\.\d+)', f)
valid_loss = re.findall(r'Valid loss: (\d+\.\d+)', f)
train_loss = [float(i) for i in train_loss]
valid_loss = [float(i) for i in valid_loss]
print("train_loss =", train_loss)
print("")
print("valid_loss =", valid_loss)
キャプチャ グループが 1 つの場合、re.findall すべての行を検索し、キャプチャ グループ内の値をリストとして返します。
正規表現関数は文字列のみを返すため、値は浮動小数点数に変換されて出力されます。その後、それらを別の Python スクリプトで float のリストとして直接使用できます。
結果は次のとおりです。
sed を使用し、出力を train_losses.txt に保存し、そのファイルから読み取ることもできます。まず、「/Train/」を使用して「Train」が存在する行のみをターゲットにし、次に前と同じ正規表現を適用します。
sed -En '/Train/ s/.*Train loss: ([0-9]+\.[0-9]+).*/\1/p' log_train.txt | tee train_losses.txt
sed が関連するすべての行の内容と一致するように、先頭と末尾に「.*」が追加されます。次に、行全体がキャプチャ グループの値に置き換えられます。 tee コマンドは、sed の出力を train_losses.txt にリダイレクトするために使用され、同時にターミナルの内容も出力されます。
エポックを抽出するには何が必要かを少し考えてください。このような行すべてについて、[500/10000] から 500 を抽出する必要があります。配列は [1, 500, 1000, 1500, ...] のようになります。前の例で使用したのと同じアプローチに従うことができます。
「[」と一致させたい場合は注意してください。 " または "] 」、そこから逃げなければなりません。答えはここにあります。
ファイル名の一括変更
これらのファイルには、プレフィックスとしてランダムな値が含まれています。すべてのファイルの名前を 1.mp4、2.mp4 などに変更する必要があります。これがファイルの生成方法です。
これは、名前にシーケンス番号が含まれているファイルのリストがあるものの、その他の不要な文字も含まれている場合の一般的なシナリオです。
パターンはエピソードまでのすべてに一致し、次にアンダースコア、最後に番号と .mp4 に一致する必要があります。
関連する値は、キャプチャ グループ内に入れる「.mp4」の前の番号です。 .*Episode_ 番号までのすべてが一致します。次に、([0-9]+) を使用して番号を取得します。 .mp4 も \.mp4 と一致します 。
したがって、最終的な正規表現は .*Episode_([0-9]+)\.mp4 です。 。 .mp4 を保持したいので、 置換文字列は \1.mp4 になります。 .
これは、sed を使用して問題を解決する 1 つの方法です。
for i in *.mp4; do
newname=$(echo $i | sed -En 's/.*Episode_([0-9]+)\.mp4/\1.mp4/p')
mv $i $newname
done;ls
まず新しい名前が変数に保存され、次に mv コマンドを使用してファイルの名前が変更されます。
.* を使用すればよかったでしょうか? .*Episode_ の代わりに ?この例では、そうです。ただし、Steins_Gate0.mp4 のようなファイル名が存在する可能性があります。 0 は はムービー名の一部ですが、実際にはこのファイルの名前を変更したくなかったので、できるだけ具体的にすることをお勧めします。
一部のファイルに「Random_episode6.mp4」という名前が付いている場合はどうなるでしょうか?違いは、エピソードの後にアンダースコアがないことです。どのような変更を加える必要がありますか?
答えは、「?」を追加する必要があるということです。 「_」の後に入力するとオプションになります。正規表現は .*Episode_?([0-9]+)\.mp4 になります。 .
メールの検証
電子メールを検証するためのあらゆる種類の複雑な正規表現があります。
これは単純なものです:^[^@ ]+@[^@.]+\.\w+$ 。 A@B.C の形式に一致します。
以下の表は、このパターンをさらに細かく分割したものです。
パターンマッチ^ 行頭[^@ ]+ 「@」とスペース文字@[^@.]+を除くすべて @ の後に「@」と「.」以外のものが続く文字\.\w+ 「。」単語文字$が後に続きます 行末
regexr サイトでは、右上隅の [フラグ] タブからマルチライン フラグを有効にできます。末尾の「gm」は、複数行フラグが有効であることを示します。
行 2、3、5、6 が一致していないことがわかります。理由と、正規表現のどの部分が失格の原因となっているのかわかりますか?
答えはここにあります
パスワードの制約
正規表現を使用して制約を課すこともできます。ここでは、前向きな先読みの力を明らかにします。
文字列に数字が含まれている場合にのみ文字列を受け入れたいとします。 '\d' クラスを使用して数字を検索する方法はすでに知っています。これを実現するには、[^\d]*\d を使用します。 。これは、数字以外の文字と 0 回以上一致し、その後数字と一致します。
.*\d という式を使用することもできます。 1 桁に一致させます。したがって、文字列に数字がない場合、先読みは失敗し、その文字列のどの文字も一致せず、空の文字列 "" が返されます。
プログラミング言語を使用している場合、正規表現が空の文字列を返したかどうかを確認し、制約が満たされていないと判断できます。
次の基準を課す正規表現を作成します。
<オル>これを実現するには、ポジティブ先読みを使用します。これは正規表現です:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,16}$
以下の表は、正規表現のどの部分がどの制約を課すかを説明しています。
パターンに課せられた制約.{8,16} 最小 8 文字、最大 16 文字(?=.*[a-z]) 少なくとも 1 つの小文字(?=.*[A-Z]) 少なくとも 1 つの大文字(?=.*\d) 最低1桁
少なくとも 5 文字の大文字を挿入するには、どのような変更が必要ですか?
(?=.*[A-Z]{5,}) と思うかもしれません。 仕事をするだろう。ただし、この式では 5 つの文字がすべて揃っている必要があります。 rand-ABCDE-rand のような文字列 0AxBCDxE0 は一致しますが、 5 つの大文字があっても (隣接していないため) 一致しません。
またしても捕獲グループが助けに来てくれています。文字列内の任意の場所にある 5 つの大文字と一致させたいと考えています。 1 つの大文字を .*[A-Z] と照合できることはすでにわかっています。 。ここで、それらをキャプチャ グループ内に配置し、最小 5 の量指定子を付加します。式は (.*[A-Z]){5,} になります。 .
最終的な答えは次のとおりです。
(?=.*[A-Z]) の代わりに (?=(.*[A-Z]){5,}) が必要になります 。式は ^(?=.*[a-z])(?=(.*[A-Z]){5,})(?=.*\d).{8,16}$ になります。 .
より強力なパスワードを強制するために、パスワードに特定の単語が含まれないように要求することもできます。
たとえば、pass が含まれるパスワードを拒否したいとします。 または 1234 。否定先読みは、この仕事のためのツールです。正規表現は ^(?!.*(pass|1234)).*$ になります。 .
この正規表現では、pass を入力します。 および 1234 キャプチャ グループ内で論理 OR 演算子を使用しました。このキャプチャ グループは、?!.* というプレフィックスが付いた別のキャプチャ グループ内にネストされています。 。これにより、.{8,} までに少なくとも 8 文字がある場合に一致する負の先読みになります。 pass という条件付き または 1234 文字列内のどこにも存在することはできません。
最後の言葉
この記事を読み進める間に、十分な練習ができたことを願っています。多少の構文を忘れても大丈夫です。重要なのは、中心となる概念を理解し、正規表現で何ができるかをよく理解することです。パターンを忘れた場合は、Google で検索するか、チートシートを参照するだけで済みます。
練習すればするほど、外部からの助けなしでやっていけるようになります。最終的には、非常に複雑で効果的な正規表現を完全にオフラインで作成できるようになります。
すでにいくつかの優れた正規表現チートシートが存在するため、ここで中心となる概念と一般的な使用例について参照できる、より詳細なものを作成したいと思いました。
チートシートを探している場合は、QuickRef のチートシートが役立ちます。ここは構文を思い出すのに適しており、さまざまなプログラミング言語の正規表現関連関数の基本的な概要も提供します。
ほとんどの正規表現テクニックは、すべてのプログラミング言語およびツールで同じですが、特定のツールは追加機能を提供する場合があります。したがって、使用しているツールについてよく調べて、最適なものを選択してください。
私の最後の提案は、できるからといって正規表現の使用を強制しないことです。多くの場合、通常の string.find() 仕事をやり遂げるには十分です。しかし、ターミナル内に住んでいる場合は、正規表現だけで実際に多くのことができることは確かです。
この種の記事が気に入った場合は、私のブログやツイッターに注目していただければ幸いです。
無料でコーディングを学びましょう。 freeCodeCamp のオープンソース カリキュラムは、40,000 人以上の人々が開発者としての職に就くのに役立ちました。始めましょう
-
ドットファイル–ドットファイルとは何ですか?MacとLinuxでそれを作成する方法
ドットファイルは、ソフトウェア開発者としてのキャリアにおいて不可欠な役割を果たす重要なファイルです。 まず、彼らはあなたをより生産的にするのを助けることができます。しかし、それだけではありません。どのマシンでも、自分で作成した生産的なセットアップを行うことができます。 この記事は、ドットファイルの使用を開始する方法の概要です。 それらが何であるか、システム上でそれらを見つける方法、およびいくつかの単純なドットファイルを作成する方法を学習します。さらに、設定をカスタマイズして知識を広げる方法について、いくつかの提案とリソースを提供します。 始めましょう! ドットファイルとは何ですか?
-
ターミナルからVimの複数のインスタンスにまたがるクリップボードの内容にアクセスする
Vim (Viの改善 )は、プログラマーの間で最も人気のあるテキストエディタの1つです。速記コマンドでさまざまな操作を実行する独自の専門分野があります。 たとえば、強調表示されたテキストをコピーするには、「 y」を使用します ‘コマンドと‘ x ‘同じようにカットします。ただし、デフォルトでは vim ( gVimではありません )vimインスタンスを閉じた後はクリップボードの内容にアクセスできません。 Vimは「+」を使用します ‘システムクリップボードを参照するために登録します。 「vim–version」を実行できます ‘および「 + xterm_clipboard」のよ