2017-01-18 11 views
0

私のプロジェクトでは、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を)私はragel HTML主にこの作品に基づいた文法は、用意しました。この目的のために ragelでHTMLを解析する際の問題

をほとんどすべてがうまく(素晴らしいツールをありがとう!)作品、私ができる1つの問題を除いて」トンまでに克服:

私は、入力として、このテキストを指定した場合:

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

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

一般に、空白以外のテキストが'<a'タグの前に存在すると、パーズはその内容をコンテンツとみなし、パーサーはタグのオープンを認識しません。

このレポ:https://github.com/amdei/ragel_html_sample Cプログラム(ngx_url_html_portion.rl)として働くことを目指して意図的に簡略化した文法のサンプル。 入力ファイルinput-nbsp.htmlもあり、アプリケーションの入力が必要です。

ragel ngx_url_html_portion.rl 

が、その後の.cファイルをコンパイルしたとのprogrammを実行します。

それで遊ぶためには、文法から.Cファイルを作成します。

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

いずれの手がかりにも心から感謝します。

答えて

0

定義されたFSMの問題は、スペースまで 'コンテンツ'にすべての文字を含めることです。ルールからHTMLタグを開く '<'を除外する必要があります。ここには例としてのdiffがあります:

$ 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 = (
関連する問題