0

こんにちは。タグをクリーンアップするか、少なくともテキスト内のカスタムタグ内からデータを取得するためのベストプラクティスやアイデアを探しています。

すべての行を手動で処理するある種の「パーサー」をコーディングできると確信していますが、今日はもっと賢い方法はありませんか?

データの考え:

{電話:555-123456789}

ここでは、「電話」がキーであり、番号がデータです。JSON形式によく似ていますが、人間が作成する方が簡単です。

また

{link:   article123456  ;    title:    Read about article 123456 here   } 

通常の(X)HTMLでもかまいません:

<a         href="article123456.html"      >  Read about article 123456 here  </a>

人間は入力を「トリミング」するのが必ずしも良いとは限りません。また、怠惰なWYSIWYGエディターで作成された古いウェブサイトでもないため、最初にどのペアが一緒に属しているかを把握し、「内のデータ」を見つけた後、結果をトリミングする必要があります。

問題は上記の「タイトル」の部分にあり、タイトルテキストを囲む「」がないため、自動的に追加されるか、エラーが人間に表示される可能性があります。

これらのデータを最良の方法で取得する方法について何か考えはありますか?うまくいく方法はいくつかあるようですが、この問題に対する最善のアプローチは何ですか?

4

1 に答える 1

2

最初に、解析していたデータの構文用の「トークンライザー」を作成します。トークナイザーは、文字列を一連のフラグメントまたはトークンに分解する(比較的)単純なプロセスです。たとえば、最初の2つのケースでは、基本トークンは「{」、「}」、「:」、「;」で構成され、その他はすべてデータトークンとして解釈されます。これは、ループ、再帰関数、または他の多くの方法で実行できます。2番目の例をトークン化すると、次の値を持つ配列(または他の種類のリスト)が生成されます。

"{", "link", ":", "   article123456  ", ";", "    title", ":", "    Read about article 123456 here   ", "}"

次のステップは、データを「サニタイズ」することですが、これらの場合、実際に意味するのは、不要な空白を削除することだけです。生成されたトークン配列を反復処理し、開始または終了の空白がないように各トークンを変更します。この手順はトークン化と組み合わせることができますが、個別に行う方がはるかにクリーンで明確だと思います。トークンは次のようになります。

"{", "link", ":", "article123456", ";", "title", ":", "Read about article 123456 here", "}"

そして最後に、実際の「解釈」。トークン配列を、解析プロセスの最終製品となる予定の実際のデータ構造に変換する必要があります。このためには、再帰関数が間違いなく必要になります。関数がデータトークン、コロントークン、データトークンの順に呼び出されると、キーと値のペアでそれらが解釈され、それに応じてデータ構造が生成されます。セミコロントークンを含む一連のトークンで呼び出されると、各セミコロンでトークンが分割され、結果の各グループで呼び出されます。また、中括弧トークン内に含まれるトークンで呼び出された場合、他の処理を行う前に、含まれているトークンで自分自身を呼び出します。これは、必ずしもこれらのさまざまなケースをチェックする順序ではないことに注意してください。特に、

これらのプロセスの結果は、必要なタイプの完全に解析されたデータ構造になります。このプロセスでは、データがすべて文字列型として暗黙的に格納されていることを前提としていることに注意してください。「3」と3の解釈を変えたい場合は、少し複雑になります。私が概説したこの方法は、それを行う唯一の方法ではありませんが、それが私が問題に取り組む方法です。

于 2010-06-20T15:14:40.073 に答える