cjx は現在クローラー プロジェクトに取り組んでおり、ページから必要なコンテンツを緊急にクロールする必要がありますが、論理的判断によってコンテンツを取得するのは複雑すぎます。正規表現という強力なツールを持っていることは非常に幸運であり、Cjx は以前から正規表現についてある程度の知識を持っていました。しかし、私は常に理解が不完全な状態にあり、満足のいく正規表現を自分で効果的に書くのは困難です。最近、ジェフリー E.F. フリード著『Mastering Regular Expressions』というタイトルの本をインターネットで見つけました。 最初の章を読んだ後、私は突然、いくつかの規則的なルールを書くことができることに気づきました、はは~~~ cjx は突然、敗者から背が高く、お金持ちで、ハンサムな人にアップグレードされたように感じました... 以下は、本の最初の章~
行頭と行末
おそらく最も理解しやすいメタキャラクターは、テキスト行をチェックするときのキャレット記号 ^ とドル記号 $ です。^ は行頭、$ は行頭を表します。終わり。
読者は、正規表現を文字に従って理解する習慣を身に付けることが最善です。 たとえば、これは行わないでください:
^cat は cat
で始まる行に一致しますが、次のように理解する必要があります:
^cat は行の最初の文字が c で始まり、その後に a が続くテキストに一致します。 t が続きます。
これら 2 つの解釈の結果に違いはありませんが、新しく出現した正規表現は文字で解釈した方が内部ロジックを理解しやすくなります。
複数の文字の 1 つと一致します
"grey" という単語を検索する必要があり、それが "gray" と書かれているかどうかが不明な場合は、正規表現構造 [...] を使用できます。これにより、ユーザーはどこかに一致すると予想される文字 (通常は文字グループと呼ばれます) をリストすることができます。
つまり、 gr[ea]y は次のことを意味します: 最初に g を見つけ、次に r、次に a または e、そして最後に y を見つけます。
文字グループ内では、文字メタ文字 '-' は範囲を表します:
[0-9A-Z_!.?] は、数字、大文字、アンダースコア、感嘆符、ピリオド、または疑問符に一致します。
排他的な文字グループ
[...] を [^...] に置き換えます。この文字グループは、リストにない文字と一致します。例: [^1-6] は、1 ~ 6 を除く任意の文字に一致します。このグループの先頭にある ^ は除外を意味するため、ここにリストされるのは、一致させたい文字ではなく、一致させたくない文字です。
任意の文字と一致するためにドットを使用する
メタキャラクター 任意の文字と一致するために使用される文字グループを記述する簡単な方法です。式の中で「任意の文字に一致する」プレースホルダーを使用する必要がある場合は、ドットを使用すると便利です。
任意の部分式と一致します
メタキャラクター | は、「または」を意味する非常に簡潔なメタキャラクターです。これを利用して、さまざまな部分式を組み合わせて合計式を作成でき、この合計式は任意の部分式と一致します。
オプション要素
それでは、色と色のマッチングを見てみましょう。それらの違いは、次の単語の u が前の単語よりも 1 つ多いことです。この問題を解決するには coloru?r を使用できます。メタ文字 ? (つまり、疑問符) はオプションのオプションを表します。文字の後に追加することは、その文字がここに表示されることを許可することを意味しますが、その文字の出現は一致が成功するための必須条件ではありません。
その他の数量詞:
+ (プラス記号) と * (アスタリスク) の繰り返しは疑問符と同様に機能します。メタ文字 + は、直前の要素が 1 回以上出現することを意味し、* は、直前の要素が何度でも出現するか、まったく出現しないことを意味します。
次に、高さ 14 の水平線を表す
括弧と後方参照
これまで、括弧の 2 つの使用法を見てきました: 1. 複数のオプションの範囲を制限する; 2. 複数の文字を 1 つの単位に結合し、疑問符やアスタリスクなどの数量詞によって使用されます。ここで、括弧の別の使用法である後方参照を紹介したいと思います。これは egrep では一般的ではありませんが (一般的な GNU バージョンはこの機能をサポートしています)、他のツールでは非常に一般的です。
後方参照をサポートするツール ソフトウェアでは、括弧内の部分式と一致するテキストを「記憶」できます。これらのテキストが何であっても、メタ文字シーケンス 1 はそれらを記憶できます。
もちろん、式の中で複数の括弧を使用することもできます。次に、1、2、3 などを使用して、1 番目、2 番目、および 3 番目の括弧のセットと一致するテキストを表します。括弧は、左から右に左括弧 '(' の出現順に実行されるため、([a-z])([0-9])12 の 1 は [a-z] の一致内容を表し、2 は [0] を表します。 - 9] コンテンツの一致
マジック エスケープ
場合によっては、.+*? などのいくつかの記号を一致させる必要があるかもしれませんが、同時にそれらがメタ記号であることがわかるため、それらの前にエスケープを追加できます。シンボルは、これらの特別なメタシンボルと一致するために使用されます
いくつかの便利な略語
t タブ文字
n 改行文字
r キャリッジリターン文字
s スペース、改行、タブインデントなどの任意の空白文字すべての空白文字
S s
w [a-zA を除く任意の文字] -Z0-9] は w+ で非常に便利で、単語
W w を除く任意の文字
d [0-9]、つまり数字
D d を除く任意の文字、つまり [^0-] と一致させるために使用できます。 9]