正規表現の学習[終了]

166
Teifion 2008-08-08 04:05.

正規表現がよくわかりません。わかりやすく説明してもらえますか?オンラインのツールや本があれば、それらにリンクしてもらえますか?

1 answers

802
Greg Bacon 2010-05-04 06:09.

最も重要な部分は概念です。ビルディングブロックがどのように機能するかを理解すると、構文の違いは穏やかな方言にすぎません。正規表現エンジンの構文の上のレイヤーは、使用しているプログラミング言語の構文です。Perlなどの言語はこの複雑さのほとんどを取り除きますが、Cプログラムで正規表現を使用している場合は、他の考慮事項に留意する必要があります。

正規表現を、好きなように組み合わせて組み合わせることができる構成要素と考えると、自分のパターンを記述してデバッグする方法だけでなく、他の人が書いたパターンを理解する方法を学ぶのに役立ちます。

簡単に始める

概念的には、最も単純な正規表現はリテラル文字です。パターンNは文字「N」と一致します。

隣り合う正規表現はシーケンスに一致します。たとえば、パターンNickは、「N」、「i」、「c」、「k」のシーケンスに一致します。

grepUnixで使用したことがある場合は、通常の文字列を検索するためだけであっても、すでに正規表現を使用しています。(reingrepは正規表現を指します。)

メニューから注文する

少し複雑にするだけで、「ニック」または「ニック」のいずれかをパターンに一致させることができます[Nn]ick。角括弧内の部分は文字クラスです。つまり、囲まれた文字の1つと完全に一致します。文字クラスで範囲を使用することもできるため[a-c]、「a」または「b」または「c」のいずれかに一致します。

パターン.は特別です。リテラルドットのみに一致するのではなく、任意の文字に一致します。概念的には本当に大きなキャラクタークラスと同じ[-.?+%$A-Za-z0-9...]です。

キャラクタークラスをメニューと考えてください。1つだけ選んでください。

役立つショートカット

を使用.すると、入力の手間を省くことができます。また、一般的なパターンには他にもショートカットがあります。数字を一致させたいとしましょう[0-9]。それを書く1つの方法はです。数字は頻繁に一致するターゲットであるため、代わりにショートカットを使用でき\dます。その他は\s(空白)と\w(単語文字:英数字またはアンダースコア)です。

大文字のバリアントはそれらの補数であるため、たとえば、空白以外の文字と\S一致します。

一度では不十分

そこから、数量詞を使用してパターンの一部を繰り返すことができます。たとえばab?c?数量詞は変更するサブパターンをオプションにするため、パターンは「abc」または「ac」と一致します。他の数量詞は

  • * (0回以上)
  • + (1回以上)
  • {n}(正確にn回)
  • {n,}(少なくともn回)
  • {n,m}n回以上m回以下)

これらのブロックのいくつかを組み合わせると、パターンは[Nn]*ickすべてに一致します

  • 病気
  • ニック
  • ニック
  • ニック
  • nNick
  • ニック
  • (等々)

最初の試合は重要な教訓を示しています:*常に成功します!どのパターンもゼロ回一致できます。

他のいくつかの有用な例:

  • [0-9]+(およびそれに相当する\d+)は、負でない整数と一致します
  • \d{4}-\d{2}-\d{2} 2019-01-01のような形式の日付に一致します

グループ化

数量詞は、パターンをそのすぐ左に変更します。0abc+0'0abc0'、 '0abcabc0'などと一致すると思われるかもしれませんが、プラス数量詞のすぐ左のパターンはcです。これは0abc+0、「0abc0」、「0abcc0」、「0abccc0」などに一致することを意味します。

'abc'の1つ以上のシーケンスを、両端がゼロで一致させるには、を使用します0(abc)+0。括弧は、単位として定量化できるサブパターンを示します。正規表現エンジンでは、括弧で囲まれたグループに一致する入力テキストの部分を保存または「キャプチャ」することも一般的です。この方法でビットを抽出することは、インデックスやをカウントするよりもはるかに柔軟性があり、エラーが発生しにくくなりますsubstr

交替

以前、「ニック」または「ニック」のいずれかに一致する1つの方法を見ました。もう1つは、のように交替することNick|nickです。交替には、左側のすべてと右側のすべてが含まれることを忘れないでください。グループ化括弧を使用して|たとえば、の範囲を制限します(Nick|nick)

別の例として、あなたは同等に書くことができる[a-c]ようa|b|c、多くの実装では、選択肢が1よりも大きい長さを持つことになりますと仮定しているため、これはおそらく、最適以下であることがあります。

脱出

一部の文字は一致しますが、他の文字には特別な意味があります。このパターン\d+は、バックスラッシュ、小文字のD、プラス記号が一致しません。これを取得するには、を使用します\\d\+。バックスラッシュは、次の文字から特別な意味を削除します。

貪欲

正規表現の数量詞は貪欲です。これは、パターン全体を正常に一致させながら、可能な限り多くのテキストを一致させることを意味します。

たとえば、入力が

「こんにちは」と彼女は言った、「お元気ですか?」

".+"「こんにちは」だけに一致することを期待するかもしれませんが、「こんにちは」から「あなた?」までずっと一致しているのを見ると驚かれることでしょう。

貪欲なものから慎重と思われるものに切り替える?には、数量詞に余分なものを追加します。これで\((.+?)\)、質問の例がどのように機能するかがわかりました。これは、リテラルの左括弧の後に1つ以上の文字が続き、右括弧で終了するシーケンスと一致します。

入力が「(123)(456)」の場合、最初のキャプチャは「123」になります。欲張りでない数量詞は、パターンの残りの部分ができるだけ早くマッチングを開始できるようにする必要があります。

(あなたの混乱について((.+?))は、同じことをする正規表現の方言はわかりません。途中で何かが送信中に失われたのではないかと思います。)

アンカー

特別なパターン^を使用して、入力の最初で$のみ一致し、最後でのみ一致します。「表と裏が何なのかはわかっているが、その間のすべてを教えて」というパターンで「ブックエンド」を作るのは便利なテクニックです。

フォームのコメントと一致させたいとしましょう

-- This is a comment --

あなたが書くだろう^--\s+(.+)\s+--$

あなた自身のものをつくる

正規表現は再帰的であるため、これらの基本的なルールを理解したので、好きなように組み合わせることができます。

正規表現を作成およびデバッグするためのツール:

  • RegExr(JavaScript用)
  • Perl:YAPE:正規表現の説明
  • 正規表現コーチ(CL-PPCREに裏打ちされたエンジン)
  • RegexPal(JavaScript用)
  • 正規表現オンラインテスター
  • レジックスバディ
  • 正規表現101(PCRE、JavaScript、Python、Golang用)
  • Visual RegExp
  • Expresso(.NET用)
  • Rubular(Ruby用)
  • 正規表現ライブラリ(一般的なシナリオの事前定義されたRegexes)
  • Txt2RE
  • 正規表現テスター(JavaScript用)
  • 正規表現ストーム(.NET用)
  • Debuggex(ビジュアル正規表現テスターおよびヘルパー)

  • 正規表現の習得、第2版、および第3版。
  • 正規表現に関するチートシート
  • 正規表現クックブック
  • 正規表現を自分で教える

無料のリソース

  • RegexOne-シンプルでインタラクティブな演習で学びます。
  • 正規表現-知っておくべきことすべて(PDFシリーズ)
  • 正規表現の構文の概要
  • 正規表現のしくみ

脚注

†:.任意の文字に一致する上記のステートメントは、厳密には真実ではない教育目的の簡略化です。ドットは改行以外の文字と一致します"\n"が、実際には.+、改行の境界を越えるなどのパターンを期待することはめったにありません。Perl正規表現には、たとえば、任意の文字に完全に一致させるための/sスイッチとJavaがあります。このような機能を備えていない言語の場合は、「任意の空白または任意の非空白」、つまり何にでも一致するようなものを使用できます。Pattern.DOTALL.[\s\S]

Related questions

MORE COOL STUFF

「水曜日」シーズン1の中心には大きなミステリーがあります

「水曜日」シーズン1の中心には大きなミステリーがあります

Netflixの「水曜日」は、典型的な10代のドラマ以上のものであり、実際、シーズン1にはその中心に大きなミステリーがあります.

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ケイト・ミドルトンは、州の夕食会と州の訪問中にカミラ・パーカー・ボウルズからスポットライトを奪いたくなかった、と専門家は言う.

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンが、オリビア・ワイルドが彼女とハリー・スタイルズとの間の「難しい」が「非常に友好的」な分割を恒久的にすることを望んでいる理由を見つけてください.

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンが舞台裏で「非常に困難な時期」を過ごしていたと伝えられている理由を調べてください.

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セント ヘレナ島のジェイコブズ ラダーは 699 段の真っ直ぐ上る階段で、頂上に到達すると証明書が発行されるほどの難易度です。

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

パンデミックは終わったかもしれないが、Covid-19 は終わっていない

パンデミックは終わったかもしれないが、Covid-19 は終わっていない

2021 年 6 月 8 日にニューヨーク市で開催された covid-19 パンデミックで亡くなった人々の命を偲び、祝うために、ネーミング ザ ロスト メモリアルズが主催するイベントと行進の最中に、グリーンウッド墓地の正門から記念碑がぶら下がっています。週末、ジョー・バイデン大統領は、covid-19 パンデミックの終息を宣言しました。これは、過去 2 年以上にわたり、公の場でそうするための長い列の中で最新のものです。

デビル・イン・オハイオの予告編は、エミリー・デシャネルもオハイオにいることを明らかにしています

デビル・イン・オハイオの予告編は、エミリー・デシャネルもオハイオにいることを明らかにしています

オハイオ州のエミリー・デシャネル みんな早く来て、ボーンズが帰ってきた!まあ、ショーボーンズではなく、彼女を演じた俳優. エミリー・デシャネルに最後に会ってからしばらく経ちました.Emily Deschanel は、長期にわたるプロシージャルな Bones の Temperance “Bones” Brennan としてよく知られています。

ドナルド・トランプはFBIのマー・ア・ラーゴ襲撃映像をリリースする予定ですか?

ドナルド・トランプはFBIのマー・ア・ラーゴ襲撃映像をリリースする予定ですか?

どうやら、ドナルド・トランプに近い人々は、今月初めにFBIによって家宅捜索された彼のMar-a-Lago財産からの映像を公開するよう彼に勧めています. 前大統領はテープを公開するかどうかを確認していませんが、息子はフォックス・ニュースにそうなるだろうと語った.

Andor は、他の Star Wars ショーから大きな距離を置きます。

Andor は、他の Star Wars ショーから大きな距離を置きます。

アンドールの一場面。数十年前、ジョージ・ルーカスがスター・ウォーズのテレビ番組を制作するのを妨げた主な理由は、お金でした。

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、子供向けのパズルの本の序文を書き、ジョージ王子、シャーロット王女、ルイ王子と一緒にテキストを読むと述べた.

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

Yak's Produce は、数十個のつぶれたメロンを野生動物のリハビリ専門家であるレスリー グリーンと彼女のルイジアナ州の救助施設で暮らす 42 匹の動物に寄付しました。

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

8 枚目のスタジオ アルバムのリリースに向けて準備を進めているデミ ロヴァートは、「スーパー グレート ガイ」と付き合っている、と情報筋は PEOPLE に確認しています。

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

イーサン プラスの誕生日のお祝いは、TLC のウェルカム トゥ プラスビルのシーズン 4 のフィナーレで、戦争中の母親のキム プラスと妻のオリビア プラスを結びつけました。

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

ホームオフィスのセットアップ術を極めよう!AppExert の開発者は、家族全員が一緒にいる場合でも、在宅勤務の技術を習得しています。祖父や曽祖父が共同家族で暮らしていた頃の記憶がよみがえりました。

2022 年、私たちのデジタル ライフはどこで終わり、「リアル ライフ」はどこから始まるのでしょうか?

20 年前のタイムトラベラーでさえ、日常生活におけるデジタルおよびインターネットベースのサービスの重要性に驚くことでしょう。MySpace、eBay、Napster などのプラットフォームは、高速化に焦点を合わせた世界がどのようなものになるかを示してくれました。

ニューロマーケティングの秘密科学

ニューロマーケティングの秘密科学

マーケティング担当者が人間の欲望を操作するために使用する、最先端の (気味が悪いと言う人もいます) メソッドを探ります。カートをいっぱいにして 3 桁の領収書を持って店を出る前に、ほんの数点の商品を買いに行ったことはありませんか? あなたは一人じゃない。

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

私たちが住んでいる世界を確実に理解するには、データが必要です。ただし、空間参照がない場合、このデータは地理的コンテキストがないと役に立たなくなる可能性があります。

Language