精華區beta RegExp 關於我們 聯絡資訊
<?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
LPH66:因為那上面似乎弄錯了 那個的正確寫法應該是 (.|\n) 09/11 09:11
LPH66: . 在 [] 裡就只是一個點 其他什麼都不是 09/11 09:11
pm2002:!!!!!!!!!!!!!!! 原來[.]只是點喔,誤會太久了@@ 09/11 09:15
pm2002:可是用(.|\n)就只能取一個字元,要多行匹配只能用[\s\S]+ 09/11 09:17
pm2002:這類的嗎?還是有其他方法? 09/11 09:18
pm2002:以上為例,除了用([\s\s]+),還有其他方式能達成同目的嗎? 09/11 09:27
pm2002:試成功了 ((?:.|\n)+) 感謝 LPH大 09/11 09:38
blackkaku:<text>(.*\n)*</text> 09/11 20:49
> -------------------------------------------------------------------------- < 作者: godspeedlee (妳,我可以) 看板: RegExp 標題: Re: [問題] 匹配多行 時間: Sun Sep 11 15:09:18 2011 ※ 引述《pm2002 (pm2002)》之銘言: : <?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]+ 就抓不到? 參考: http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php 添加 modifier: s (PCRE_DOTALL), i (PCRE_CASELESS) 得到: '/<text>(.*?)<\/text>/is' 另外如果是為了解 HTML,PHP 也有 DOM API 可用: http://php.net/manual/en/book.dom.php -- http://godspeedlee.myweb.hinet.net/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.124.96.151