簡體   English   中英

PHP正則表達式問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM