[問題] 匹配多行

作者: 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