php 正则 匹配换行符的问题

例如:$str="<div>你好
111
</div>";
为什么
$reg="/<div>(.+\s\d+\s)<\/div>/";
preg_match_all($reg,$str,$str_arr);
var_dump($str_arr);
匹配不了?

另外这个怎么简写?(“.”可以匹配除换行符外的任意字符 当然也可以代替\d)
$reg="/<div>(.+\s)+<\/div>/";这样写(.+\s)只能匹配到“111”和后面的换行,前面的“你好”和它后面的换行匹配不到 这是为什么?正确怎么写?(除了$reg="/<div>(.+)<\/div>/s";还能怎样写?)
除匹配<div>中的内容外 我更希望将里面的每一行内容都罗列出来 最后得到的结果希望是这样的:
Array(
[0] => Array(
[0] => <div>你好
111
</div> )
[1] => Array (
[0] => 你好
)
[2] => Array (
[0] => 111
)
[3] => Array (
[0] =>
)
)
请各位高手帮帮我啊

“.”在正则里确实是不会匹配换行符的。

说它是通配符,有点名不符实。

如果你想要匹配包括换行符的所有字符的话,就用类似:[\w\W]或者[\s\S]这样的“全通配模式”;

你以上的代码,写成如下样式,就OK了:

$str="<div>你好
111
</div>";
$reg="/<div>([\w\W]*?)<\/div>/";
preg_match_all($reg,$str,$str_arr);
var_dump($str_arr);

正则是一门不大不小的学问,需要下一定的功夫在它身上。追问

“全通配模式”确实简单易用 不过我现在的结果不仅仅是想匹配div标签里的内容 更想让每一内容都筛选出来 我希望结果是这样的:
Array(
[0] => Array(
[0] => 你好
111
)
[1] => Array (
[0] => 你好
)
[2] => Array (
[0] => 111
)
[3] => Array (
[0] =>
)
) 请大侠指点

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-29
可以用
$reg="/<div>(.+\s*\d+\s*)<\/div>/";
还可以用
$reg="/<div>(.+\r\n\d+\r\n)<\/div>/";
\s是匹配 任一空白字符 , 只相当于 一个 \r 或 \n 或者 空格....
我估计lz是win环境下跑的...所以没通过...

那是因为 win环境下 换行符号是 \r\n (需要2个\s去匹配 , \s+)
LINUX环境下为 \n , lz可以在linux环境下试试....追问

是在WIN下跑 按(.+\s*)确实就匹配了 谢谢
我现在还想匹配每行的结果 请问这个怎么写?
$reg="/((.+\s*)+)/"; 好像不行。。。

追答

那得多一步了.
你好
111

";
$reg="/(.+\s*\d+\s*)/";
preg_match_all($reg,$str,$str_arr);
var_dump(preg_split('/\s+/' , $str_arr[1][0]));
?>

先把匹配出的数据拿出来. 然后用正则做个分割. 就可以了.

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网