如何在此示例中使用preg_match_all()
<div class="b1 b2 A1 C7" style="right: 9px; top:5px;">
<div class="tr">1</div>
</div>
<div class="b1 b2 A4 C2" style="right: 19px; top:5px;">
<div class="tr">2</div>
</div>
<div class="b1 b2 A1 C4" style="right: 29px; top:5px;">
<div class="tr">2</div>
</div>
我想获得这些值
<div class="tr">
1 </div>
仅 DIV 这就是我试过的
preg_match_all('/A(.+?) C(.+?)| class="tr">(\d+)<\/div><\/div>/s', $str, $m);
但现在工作我不想使用preg_replace()
新行或空格。
答案 0 :(得分:1)
这项工作针对您的具体情况:
preg_match_all('/A(\d+?)|C(\d+?)|\<div class="tr"\>(\d+?)\<\/div\>/s', $str, $m);
返回:
[0] => Array
(
[0] => A1
[1] => C7
[2] => <div class="tr">1</div>
[3] => A4
[4] => C2
[5] => <div class="tr">2</div>
[6] => A1
[7] => C4
[8] => <div class="tr">2</div>
)
[1] => Array
(
[0] => 1
[1] =>
[2] =>
[3] => 4
[4] =>
[5] =>
[6] => 1
[7] =>
[8] =>
)
[2] => Array
(
[0] =>
[1] => 7
[2] =>
[3] =>
[4] => 2
[5] =>
[6] =>
[7] => 4
[8] =>
)
[3] => Array
(
[0] =>
[1] =>
[2] => 1
[3] =>
[4] =>
[5] => 2
[6] =>
[7] =>
[8] => 2
)
答案 1 :(得分:1)
您想要的模式是:
/A(\d+) C(\d+)[^<]+<div class="tr">(\d+)/
这种模式要快得多,因为它不使用任何管道(|
),它使用一个否定的字符类来快速移向最终的捕获组。
同样重要的是要注意我的模式不会进行任何不必要的字符转义。 {“1}}字符在”贪婪“模式下同样安全,因此\d
可以删除。
由于模式中没有?
s,.
标志在正则表达式模式的末尾没有用处 - 所以我删除了它。
与MTK的741步相比,我的模式只需90步即可完成。