php 正则 匹配换行符的问题

例如:$str="<div>你好111</div>";为什么$reg="/<div>(.+\s\d+\s)<\/div>/";preg_match_all($reg,$s... 例如:$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] =>
)
)
请各位高手帮帮我啊
展开
 我来答
cmoooo
2012-11-29 · TA获得超过3587个赞
知道小有建树答主
回答量:741
采纳率:0%
帮助的人:671万
展开全部
“.”在正则里确实是不会匹配换行符的。

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

如果你想要匹配包括换行符的所有字符的话,就用类似:[\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] =>
)
) 请大侠指点
天街夜雨
2012-11-29 · TA获得超过641个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:662万
展开全部
可以用
$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]));
?>

先把匹配出的数据拿出来. 然后用正则做个分割. 就可以了.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式