0

複数行の HTML ソース コードを正規表現と一致させようとしています (AutoIt を使用)。一致する HTML ソース コード:

<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&ndash;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>&times; 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>&times; 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>&times; 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>

1 つのページに複数回表示されます (ただし、項目は<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)フラグを試しましたが、最初の出現のみをキャプチャします(その後、一致を停止します)。

4

2 に答える 2

0

複数行の HTML ソース コードに一致する正規表現:

  • ドキュメントに従って;

    • \R改行文字に一致(?>\r\n|\n|\r),
    • ドット.はしません ((?s)が設定されていない限り)。
    • \s空白文字に一致します。
  • 通常、いくつかの組み合わせが必要です ( など\R\s*?)。

  • 非キャプチャ グループは冗長です (代わりにキャプチャなしで一致します)。
  • 一意に囲まれている場合、代わりに単一の文字が除外される場合があります (attribute="([^"]*?)"二重引用符で囲まれたテキストの場合など)。

例 (二重引用符が含まれています。ドキュメント - FAQ - 二重引用符に従って扱います):

(?s)<div class="missionTitle">.*?<h3>(.*?)</h3>.*?<div class="missionProgress">.*?<span>([^<]*?)</span>.*?<input type="hidden" id="id" name="id" value="([^"]*?)"/>

視覚的な説明:

正規表現イメージ 正規表現イメージ

HTML で正規表現を使用する必要があるかどうか (このような単純なリストを超えて) は、別の問題です(been, done, T-shirt )。

于 2017-06-04T23:11:41.973 に答える