正規表現に代わるもの:APG-Exp

William Shakespeare
William Shakespeareオリジナル
2025-02-17 11:25:181022ブラウズ

An Alternative to Regular Expressions: apg-exp

この記事は、セバスチャン・セイツとアルミール・ビヘディックによって査読されました。 SetePointのすべてのピアレビューアに感謝します。 ほとんどすべてのプログラマーは、時々何らかの形で正規表現を使用する必要があります。多くの人にとって、パターンの文法は神秘的で気が遠くなるように思えるかもしれません。このチュートリアルでは、ABNFパターンの構文を使用し、読みやすいRegexpの機能が豊富な代替品であるAPG-Expを一致させる新しいパターンを紹介します。

キーポイント

APG-EXPは、ABNF構文を使用して、通常の表現に優しいユーザーフレンドリーな代替品を提供します。
  • APG-EXPは、インストールと使用が非常に簡単で、node.js環境とGithubの直接ダウンロードオプションをサポートしているため、さまざまなプロジェクト設定にアクセスできます。
  • APG-EXPで使用される
  • ABNF構文は、複雑なパターンをよりシンプルで読みやすいコンポーネントに分割します。これは、通常は神秘的な正規表現よりも直感的です。
  • APG-EXPは、ネストされたパターンを一致させるために重要な再帰など、JavaScriptのRegexpで利用できない高度なパターンマッチング機能をサポートしています。
  • このライブラリは、パターンマッチングロジックの問題を効果的に特定して解決できるように、詳細なエラー処理およびデバッグツールを提供します。
  • その強力な機能にもかかわらず、APG-Expは依然として単純なAPIを維持しており、既存のコードベースを多くの変更を必要とせずに統合して使用しやすくしています。
クイック比較

メールアドレスを確認して、このようなことに遭遇する必要があることはありますか?

パターンマッチングエンジンは、このジョブに適したツールです。これは、適切に設計された、よく書かれた正規表現です。正常に動作します。それで、あなたは他に何が好きではありませんか?
<code>^[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$</code>

まあ、あなたが正規表現の専門家であるなら、何もありません。しかし、私たちの残りの部分では、彼らは

かもしれません

読むのは難しい
  • を書くのは難しいです
  • 維持するのは困難です
  • 正規表現文法には長い長い歴史があり、毎日プログラマーとして使用している多くのツールや言語に深く統合されています。
ただし、ほぼ同時に存在している代替構文があります。これは、通常の表現のすべての機能を備えたインターネット技術仕様の作家と消費者の間で非常に人気がありますが、JavaScriptプログラミングの世界使用にはめったにありません。 。つまり、RFC 5234およびRFC 7405のIETFによって正式に定義されている、強化されたBACOS-NORパラダイム(ABNF)。

ABNFで同じメールアドレスがどのように見えるか見てみましょう。

もちろん、それはコンパクトではありませんが、HTMLやXMLのように、人間や機械が読むように設計されています。ワイルドカード検索パターンを少し理解しているだけで、「Simple English」で何が起こっているのかをほとんど読むことができます。

  • メールアドレスは、 @
  • で区切られたローカルパーツとドメインとして定義されます。
  • ローカル部分は、オプションのドット分離された単語が続く単語です
  • ドメインは、1つまたは複数のドット分離されたサブドメインに続いて、単一のトップレベルドメイン
  • ここで知らないかもしれない唯一のことは、あなたが推測したかもしれないことは次のとおりです。 ワイルドカードの文字
      が「ゼロ以上」を意味するのと同じように、1
    • は「1つ以上」を意味しますが、2*6は最低2回、最大6回の繰り返しを意味します /個別の代替
    • %d小数文字コードと文字コード範囲を定義
    • たとえば、
    • �5は#、ascii 10進35
    • を意味します
    • �5-90とは、A-Z範囲の任意の文字、ASCII 10進65-90
  • regexpおよびapg-Expのこのメールアドレスは、例1で比較されています。

APG-Expは、再gexpの外観と感触を持つように設計されたパターンマッチングエンジンですが、パターン定義にABNF構文を使用します。次のいくつかのセクションでは、次のようにご案内します。

APG-EXPをアプリケーションに統合する方法

    abnf構文の簡単なガイド
  • APG-Expを使用します
  • 次はどこに行くか - 詳細、高度な例
  • アップロードして実行して、

npm node.js環境で作業している場合は、プロジェクトディレクトリから実行してください:

require()を使用してコードにアクセスできます。

例:
<code>^[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$</code>

github

githubからコードのコピーを取得するには、プロジェクトディレクトリにリポジトリをクローンできます。
<code>email-address   = local "@" domain
local           = local-word *("." local-word)
domain          = 1*(sub-domain ".") top-domain
local-word      = 1*local-char
sub-domain      = 1*sub-domain-char
top-domain      = 2*6top-domain-char
local-char      = alpha / num / special
sub-domain-char = alpha / num / "-"
top-domain-char = alpha
alpha           = %d65-90 / %d97-122
num             = %d48-57
special         = %d33 / %d35 / %d36-39 / %d42-43 / %d45 / %d47 
                / %d61 / %d63 / %d94-96 / %d123-126</code>

またはzipファイルとしてダウンロードしてください。

次に、page.html:

<code>npm install apg-exp --save</code>

cdn

Rawgitを使用して、GitHubソースコードから直接CDNバージョンを作成することもできます。ただし、稼働時間やサポート保証を必ず読んでください(実際にFAQ全体を必ず読んでください)。

このチュートリアルのすべての例は、以下を使用します。
<code>var ApgExp = require("apg-exp");
var exp = new ApgExp(pattern, flags);
var result = exp.exec(stringToMatch);</code>

これらのファイルはMAXCDNサーバーでキャッシュされており、使用可能な限りテストするためにテストすることができます。ただし、実稼働環境の場合は、APGEXP-MIN.JSおよびAPGEXP.CSSのコピーを独自のサーバーに配置して、アプリケーションの最良の方法に従ってアクセスを確保し、ページに含める必要があります。

(記事の長さのために、次のコンテンツが切り捨てられています。継続的な処理のために後続の部分を提供してください)

<code>git clone https://github.com/ldthomas/apg-js2-exp.git apg-exp</code>

以上が正規表現に代わるもの:APG-Expの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。