我使用的是5.6版的PHP,我不明白为什么正则表达式与第二行不匹配。
$str = '<tr><td class="DH">Sale Date</td></tr><tr><td class="DD">10-MAR-15</td></tr><tr><td class="DD">18-APR-17</td></tr>';
preg_match_all('/<tr>.*?class="D.*?<\/tr>/', $str, $matches);
print_r($matches);
preg_match_all('/<tr>.*?class="DH.*?<\/tr>/', $str, $matches);
print_r($matches);
preg_match_all('/<tr>.*?class="DD.*?<\/tr>/', $str, $matches);
print_r($matches);
此代码输出:
Array
(
[0] => Array
(
[0] => <tr><td class="DH">Sale Date</td></tr>
[1] => <tr><td class="DD">10-MAR-15</td></tr>
[2] => <tr><td class="DD">18-APR-17</td></tr>
)
)
Array
(
[0] => Array
(
[0] => <tr><td class="DH">Sale Date</td></tr>
)
)
Array
(
[0] => Array
(
[0] => <tr><td class="DH">Sale Date</td></tr><tr><td class="DD">10-MAR-15</td></tr>
[1] => <tr><td class="DD">18-APR-17</td></tr>
)
)
regex本质上意味着匹配
<tr>
和
</tr>
包含
class="D
.
注意第一个regex如何正确匹配所有3行。
第二个相同,但希望行包含
class="DH
这是正确的。
第三个regex应该与包含
class="DD
. 出于某种原因,只有第一个结果(对应于第二个表行)想要包含前一行。
即使我在
</TR & GT;
和
<TR & GT;
如在
</tr> <tr>
我得到了同样的结果。但是,如果我插入一个换行符,就可以了。
有人能解释发生了什么以及如何修复我的代码吗?