0

私のプロジェクトでは、HTML ドキュメントからリンクを抽出する必要があります。この目的のために、主に次の作業に基づいて、ragel HTML 文法を用意しました: https://github.com/brianpane/jitify-core/blob/master/src/core/jitify_html_lexer.rl (ここで言及: http:// ragel-users.complang.narkive.com/qhjr33zj/ragel-grammars-for-html-css-and-javascript )

現在のところ克服できない1つの問題を除いて、ほとんどすべてがうまく機能します(素晴らしいツールに感謝します!)。

このテキストを入力として指定すると:

bbbb <a href="first_link.aspx">  cccc<a href="/second_link.aspx">

私のパーサーは最初のリンクを正しく抽出できますが、2 番目のリンクは抽出できません。それらの違いは、 と の間にスペースがあるが、 と の間に'bbbb'スペースが'<a'ないことです。'cccc''<a'

一般に、スペースを除くテキストがタグの前に存在する'<a'場合、解析はそれをコンテンツと見なし、パーサーはタグの開始を認識しません。

このリポジトリで見つけてください: https://github.com/amdei/ragel_html_sample C プログラム ( ngx_url_html_portion.rl ) として機能することを目的として、意図的に文法を単純化したサンプルです。入力ファイル input-nbsp.html もあります。これには、アプリケーションへの入力が含まれていると予想されます。

それをいじるために、文法から .c-file を作ります:

ragel ngx_url_html_portion.rl

次に、結果の .c ファイルをコンパイルし、programm を実行します。

入力ファイルは同じディレクトリにある必要があります。

どんな手がかりにも心から感謝します。

4

1 に答える 1

0

定義された FSM の問題は、スペースまでのすべての文字が「コンテンツ」に含まれることです。HTML タグの開始 '<' をルールから除外する必要があります。説明のための差分は次のとおりです。

$ git diff
diff --git a/ngx_url_html_portion.rl b/ngx_url_html_portion.rl
index ccef0ca..1f8dcf0 100644
--- a/ngx_url_html_portion.rl
+++ b/ngx_url_html_portion.rl
@@ -145,7 +145,7 @@ void copy2hrefbuf(par_t* par, u_char* p){
     );

     content = (
-      any - (space )
+      any - (space ) - '<'
     )+;

     html_space = (
于 2017-01-20T20:46:03.523 に答える