0

preg_match_all を使用して、クラスとデータ属性を html で取得したいと考えています。

以前、似たような質問をしました。以前の責任に対する正解はDOMで行われました。しかし、DOM 構造の代替として、正規表現バージョンも必要です。

パターンは正常に動作します。ただし、行が横に並んでいる場合は、受け入れられないタグからクラス名も取得されます。

<div class="noproblem"> 
    <ul class="noproblem" data-ss="1">
        <li class="noproblem" data-ss="1">
            <!-- <i> is not my tag. but there s no problem with that. because it s underneath . -->
            <i class="no_problem"></i>
        </li>
    </ul>
</div>

<div class="noproblem" data-ss"1">  <!-- problem: data-ss is not accepted -->
    <ul class="noproblem" data-ss="1">
        <!-- <i> is not my tag. my tags:  div|ul|li . -->
        <li class="noproblem"><i class="this_is_problem"></i>
        </li>
    </ul>
</div>

<div class="noproblem">
    <ul class="noproblem">
        <!-- <i> is not my tag. my tags:  div|ul|li . -->
        <li class="noproblem"><i class="this_is_problem"></i>
        </li>
        <!-- <span> is not my tag. my tags:  div|ul|li . -->
        <li class="test"><span class="this_is_problem"></span></li>
        <!-- (li class empty version): <span> is not my tag. my tags:  div|ul|li . -->
        <li><span class="this_is_problem"></span></li>
    </ul>
</div>

正規表現パターン:

$pattern = '/<(?:div|ul|li)(?:.*?(?:class|data-ss)="([^"]+)")?(?:.*?(?:class|data-ss)="([^"]+)")?[^>]*>/'; 

例と問題: https://regex101.com/r/vSIsac/5

代替ソース (私の古い質問): https://stackoverflow.com/a/51778865/6320082

4

1 に答える 1