作者pm2002 (pm2002)
看板RegExp
标题[问题] 匹配多行
时间Sun Sep 11 09:07:27 2011
<?php
$text = '<text>
这是第一行
这是第二行
这是第三行
</text>';
preg_match_all('@<text>(
[.\n]+)</text>@',$text,$result,PREG_SET_ORDER);
echo $result[0][1];
?>
以上述为例,我想取出<text></text>标签包起来的内容
维基 regex 条目的其中一条内文:
. 匹配除「\n」之外的任何单个字元。
要匹配包括「\n」在内的任何字元,请使用像「[.\n]」的模式。
如果不加s modifier的话
我用 [\s\S]+ 可以正常抓的到
为什麽用 [.\n]+ 或 [.\r\n]+ 就抓不到?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.71.185.158
1F:推 LPH66:因为那上面似乎弄错了 那个的正确写法应该是 (.|\n) 09/11 09:11
2F:→ LPH66: . 在 [] 里就只是一个点 其他什麽都不是 09/11 09:11
3F:→ pm2002:!!!!!!!!!!!!!!! 原来[.]只是点喔,误会太久了@@ 09/11 09:15
4F:→ pm2002:可是用(.|\n)就只能取一个字元,要多行匹配只能用[\s\S]+ 09/11 09:17
5F:→ pm2002:这类的吗?还是有其他方法? 09/11 09:18
6F:→ pm2002:以上为例,除了用([\s\s]+),还有其他方式能达成同目的吗? 09/11 09:27
7F:→ pm2002:试成功了 ((?:.|\n)+) 感谢 LPH大 09/11 09:38
8F:→ blackkaku:<text>(.*\n)*</text> 09/11 20:49