複数行のHTMLソースコードを(AutoItを使用して)正規表現と照合しようとしています。一致するように、HTMLソースコード:Autoit3の複数行の正規表現
<li class="mission">
<div>
<div class="missionTitle">
<h3>Eat a quarter-pounder with cheese</h3>
<div class="missionProgress">
<span>100%</span>
<div class="missionProgressBar" style="width: 100%;"></div>
</div>
</div>
<div class="missionDetails">
<ul class="missionRewards">
<li class="rewardCash">5,000–8,000</li>
<li class="rewardXP">XP +5</li>
</ul>
<div class="fightItems clearfix">
<h5><span>Prerequisites:</span></h5>
<div class="fightItemsWrap">
<div class="fightItem tooltip" title="Sunglasses" data-attack="Attack: 2" data-defence="Defence: 2">
<img src="/img/enhancement/3.jpg" alt="">
<span>× 1</span>
</div>
<div class="fightItem tooltip" title="Broad Shoulders" data-attack="Attack: 0" data-defence="Defence: 3">
<img src="/img/enhancement/1003.jpg" alt="">
<span>× 1</span>
</div>
<div class="fightItem tooltip" title="Irish Fond Anglia" data-attack="Attack: 4" data-defence="Defence: 8">
<img src="/img/enhancement/2004.jpg" alt="">
<span>× 1</span>
</div>
</div>
</div>
<form action="/quest/index/i/kdKJBrgjdGWKqtfDrHEkRM2duXVn1ntH/h/c0b2d58642cd862bfad47abf7110042e/t/1336917311" method="post">
<input type="hidden" id="id" name="id" value="17"/>
<button class="button buttonIcon btnEnergy"><em>5</em></button>
</form>
</div>
</div>
</li>
複数の単一ページ上の回(<div class="fightItems clearfix">...</div>
内が、アイテムが異なります)が存在します。
- 私は
<h3>Eat a quarter-pounder with cheese</h3>
、- 最初のスパン
<span>100%</span>
と <input type="hidden" id="id" name="id" value="17"/>
と一致する必要があります。
期待される結果(ページ上のすべての出現のための):
$a[0] = "Eat a quarter-pounder with cheese"
$a[1] = "100%"
$a[2] = "17"
私が思い付いた:
(?U)(?:<div class="missionTitle">\s+<h3>(.*)</h3>\s+<div class="missionProgress">\s+<span>(.*)</span>)|(?:<form .*\s+.*<input\stype="hidden"\sid="id"\sname="id"\svalue="(\d+)"/>\s+.*\s+</form>)
しかし、それは空のいくつかの配列-アイテムを残します。私も(?s)
フラグを試しましたが、それは最初のオカレンスだけをキャプチャします(そして後でマッチングを停止します)。
私はautoitに精通していませんが、html/xmlのサポートがあるかどうかを確認しています。適切なパーサーを使用する方がずっと良いでしょう。 – carlpett
次回は、この目的のために正規表現を使用しません。しかし、文字列の各行を繰り返し処理し、特定の部分文字列があるかどうかに基づいて処理を行うforループです。もう少し柔軟性があります。 –