0

次の正規表現を使用して、すべての1bhpまたは12bhpまたは123bhpまたは1234bhpに一致させます。それが最善の書き方かどうかはわかりませんが、うまくいきます。

preg_match_all('/(\d{1}|\d{2}|\d{3}|\d{4})bhp/', $str2b, $bhps);

ただし、どれも一致しない場合は、コンテンツの内容を一致させたいと考えています

<td class="something">THIS</td>

これの正規表現は!<td class="something">(.*?)</td>!is

私の問題は、最初の正規表現で優先順位を付けるのが困難であり、常にそこにあるbhpの内容と一致するものが見つからない場合です。<td>

ありがとうございました

重要な編集

ここで HTML の一部を見つけることができますhttp://codepad.org/AZ4g6HDZ 2 番目の tr ブロックには bhp がないため、次のブロックを取得します。<td class="mileage">this</td>したがって、これを念頭に置いて、同じ上のbhpの後にあるbhpを取得するためにbhpが見つからなくても大丈夫です<tr>

4

4 に答える 4

0
'/\d{1,4}bhp/'

最初の正規表現とまったく同じことを行います。その正規表現が一致しない場合に div を一致させたい場合は、それを括弧で囲み、|それらを一緒に追加するために使用します。これにより、次が作成されます。

'/(\d{1,4}bhp|<td class="something">(.*?)<\/td>)/'

編集:これがあなたが望む結果であるかどうかをここで確認してください: http://regex101.com/r/pV1gB5(すべての行が一致します)

于 2013-10-14T22:58:08.593 に答える
0

私がよく理解している場合、これはあなたのhtmlコードとクラスの詳細の例です:

<?php
$subject = <<<'LOD'
<tr class="main_row pc">
    <td class="details">
        <div class="attribs">
            Αγροτικό/Pickup
            2500cc,
            102bhp,
            Manual,
            Πετρέλαιο,
            Ασπρο,
        </div>
    </td>
    <td class="registration">9 / 95</td>
    <td class="mileage">151.000</td>
    <td class="price">
    <span class="p_p">€ 6.300</span>
    </td>
</tr>


<tr class="main_row pc">

    <td class="details">
        <div class="attribs">
            Λιμουζίνα/Sedan
            1800cc,
            Manual,
            Βενζίνη,
            Γαλάζιο,
        </div>
    </td>
    <td class="registration">3 / 00</td>
    <td class="mileage">0</td>
    <td class="price">
    <span class="p_p">€ 900</span>
    </td>
</tr>



<tr class="main_row pc">
    <td class="details">    
        <div class="attribs">
            Αγροτικό/Pickup
            2400cc,
            1bhp,
            Manual,
            Πετρέλαιο,
            Κόκκινο,
        </div>
    </td>
    <td class="registration">1 / 95</td>
    <td class="mileage">1</td>
    <td class="price">
    <span class="p_p">€ 2.650</span>
    </td>
</tr>
LOD;

$pattern = <<<'LOD'
~ 
<td \s* class="details">\s*  
(?>
    (?> [^0-9<]++ | [0-9](?![0-9]{0,3}bhp) | <(?!/td>) )* \K
    [0-9]{1,4}bhp
  |
    \K (?> [^<]++ | <(?!/td>) )* 
)
~ix
LOD;


preg_match_all($pattern, $subject, $matches);

print_r($matches);
于 2013-10-15T00:47:47.753 に答える