2009-06-17 212 views
0

我有這樣的正則表達式在PHP之間的匹配換行符:正則表達式,標籤

preg_match('/\[summary\](.+)\[\/summary\]/i', $data['text'], $match); 

它正常工作時,總結標籤之間的文本是在一行上。但是,當它包含換行符時,它不匹配。

我試過在這裏找到一個正確的修飾符:http://nl2.php.net/manual/en/reference.pcre.pattern.modifiers.php 但是唯一與換行符有關的是「m」,那不符合我的要求。

如何使這項工作?

+2

請注意,您的正則表達式將匹配[summary],然後匹配字符串的末尾,然後回溯直到找到[/ summary]。你可能想要的是在[summary]之後的第一個[/ summary]之後停止匹配。最簡單的方法是使用非貪婪量詞:(。+?) – Blixt 2009-06-17 10:40:34

+0

只有一組summarry標記,它只能由管理員編寫,所以在這裏並不重要。謝謝你的提示。 – 2009-06-17 11:52:57

回答

2

您鏈接到的手冊頁描述了對處理換行符有影響的另一個選項。

s(PCRE_DOTALL) 如果設置了此修飾符,則 模式中的點字符與所有字符匹配,包括換行符。沒有它,換行符被排除在外。這個修飾符相當於Perl的/ s修飾符。否定類如[^ a]總是匹配換行符,與此修飾符的設置無關。