2017-04-02 2 views
0

まだHTMLテキストから表を作成するために指定されたIDを持つすべての見出し(h1、h2、h3、..)を抽出する機能を開発しようとしていますコンテンツのRegExを使用してすべての見出しを取得してToC(Classic ASP)を構築する

私は正規表現を使用して簡単なスクリプトを作ったが、それはここに私のサンプルコードのみ1試合(最後の)

を収集するいくつかの奇妙な理由:

Function RegExResults(strTarget, strPattern) 
    dim regEx 
    Set regEx = New RegExp 
    regEx.Pattern = strPattern 
    regEx.Global = True 
    regEx.IgnoreCase = True 
    regEx.Multiline = True 
    Set RegExResults = regEx.Execute(strTarget) 
    Set regEx = Nothing 
End Function 

htmlstr = "<h1>Documentation</h1><p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.</p><h3 id=""one"">How do you smurf a murf?</h3><p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper.</p><h3 id=""two"">How do many licks does a giraffe?</h3><p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.</p>" 

regpattern = "<h([1-9]).*id=\""(.*)\"">(.*)</h[1-9]>" 

set arrayresult = RegExResults(htmlstr,regpattern) 
For each result in arrayresult 
    response.write "count: " & arrayresult.count & "<br><hr>" 
    response.write "0: " & result.Submatches(0) & "<br>" 
    response.write "1: " & result.Submatches(1) & "<br>" 
    response.write "2: " & result.Submatches(2) & "<br>" 
Next 

を私はすべての見出しを抽出する必要があります(1..9)と右タイトル段落(#ID_value)へのジャンプに使用するid値を知ることができます。

私は誰かがこれが意図したとおりに動作しない理由を知るのを助けてくれることを願っています。

はパターンで.*年代あなた

答えて

1

ありがとう貪欲ですが、あなたは、すべての可能な試合を収集するために怠惰を必要としています。代わりに.*?のを使用する必要があります。

いくつかの改善点があり、パターンは以下のようになります。

regpattern = "<(h[1-9]).*?id=""(.*?)"">(.*?)</\1>" 

' \1 means the same as the 1st group 
' backslash (\) is redundant to escape double quotes, so removed it 

Repetition with Star and Plusをご覧になることを強くおすすめします。これはRegexの怠惰で貪欲な繰り返しを理解するのに非常に有用な記事です。

ああ、私はほとんど忘れてしまった、You can't parse HTML with Regex、少なくともあなたはすべきではありません。

+0

ありがとう、とても面白い記事です! – Hart

+0

@ハートと読んでいただきありがとうございます。 –

関連する問題