[英]PHP Regular Expression Problem
我有一個用於存儲書頁的字符串。 就像這樣:
///0///
Page1 Text
///1///
Page2 Text
///2///
Page3 Text
///3///
我想提取頁面文本(Page1文本,Page2文本,Page3文本)。 這是正在使用的正則表達式:
$format = "%///\d*///(.*)///\d*///%";
preg_replace_callback($format, "process_page", $text);
根據此頁面,我可以在表達式的開頭和結尾使用/以外的其他字符。 所以我用%簡化了我的模式,所以我不必使用這樣的轉義符\\ /
對我來說似乎還可以,但是什么也沒返回。 有人可以告訴我問題出在哪里嗎?
我認為preg_split
可能是您更好的選擇:
$text = '
Page1 Text
///1///
Page2 Text
///2///
Page3 Text
';
$format = "%///\d+///%";
$arr = preg_split($format, $text);
// $arr = Array
// (
// [0] => Page1 Text
//
// [1] =>
// Page2 Text
//
// [2] =>
// Page3 Text
// )
現在每個頁面都在其自己的數組元素中。
我認為您需要s
修飾符 : $format = "%///\\d*///(.*)///\\d*///%s";
s(PCRE_DOTALL)
如果設置了此修飾符,則模式中的點元字符將匹配所有字符,包括換行符。 沒有它,換行符將被排除。 此修飾符等效於Perl的/ s修飾符。 否定類(例如[^ a])始終與換行符匹配,而與該修飾符的設置無關。
我不確定您要做什么,但就我個人而言,我不會使用正則表達式。 您知道要查找的確切字符串(例如///4///
),然后是結束字符串( ///5///
或文件末尾)。 與strpos一起使用substr可能是一個更好的選擇。
我會使用諸如preg_spilt
類的preg_spilt
(請參閱蒂姆·庫珀的答案)。
但是對於您的RegEx,請嘗試以下操作:
$format = "%///\d+///(.*?)(?=///\d+///)%s";
使用環顧斷言和s
-modifier。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.