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] =>
)
)
请各位高手帮帮我啊 展开
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] =>
)
)
请各位高手帮帮我啊 展开
2个回答
展开全部
“.”在正则里确实是不会匹配换行符的。
说它是通配符,有点名不符实。
如果你想要匹配包括换行符的所有字符的话,就用类似:[\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);
正则是一门不大不小的学问,需要下一定的功夫在它身上。
说它是通配符,有点名不符实。
如果你想要匹配包括换行符的所有字符的话,就用类似:[\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] =>
)
) 请大侠指点
展开全部
可以用
$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环境下试试....
$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]));
?>
先把匹配出的数据拿出来. 然后用正则做个分割. 就可以了.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询