[问题] 匹配多行

楼主: pm2002 (pm2002)   2011-09-11 09:07:27
<?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]+ 就抓不到?
作者: LPH66 (-6.2598534e+18f)   2011-09-11 09:11:00
因为那上面似乎弄错了 那个的正确写法应该是 (.|\n). 在 [] 里就只是一个点 其他什么都不是
楼主: pm2002 (pm2002)   2011-09-11 09:15:00
!!!!!!!!!!!!!!! 原来[.]只是点喔,误会太久了@@可是用(.|\n)就只能取一个字符,要多行匹配只能用[\s\S]+这类的吗?还是有其他方法?以上为例,除了用([\s\s]+),还有其他方式能达成同目的吗?试成功了 ((?:.|\n)+) 感谢 LPH大
作者: blackkaku (black)   2011-09-11 20:49:00
<text>(.*\n)*</text>

Links booklink

Contact Us: admin [ a t ] ucptt.com