確定較小的部分我想分裂這樣一個字符串:拆分文本成針
'This <p>is</p> a <p>string</p>'
我想4串:
這
<p>is</p>
- a
<p>string</p>
所以我想找到<p></p>
及其內容一個接一個地分割它。我怎樣才能保持相同的序列?
我可以通過該代碼獲得'This':$html1 = strstr($html, '<p', true);
但我不知道如何繼續分割以及如何爲具有多根針的可變字符串(至少2個不同的針)執行此操作。你能幫我嗎?
確定較小的部分我想分裂這樣一個字符串:拆分文本成針
'This <p>is</p> a <p>string</p>'
我想4串:
這
<p>is</p>
<p>string</p>
所以我想找到<p></p>
及其內容一個接一個地分割它。我怎樣才能保持相同的序列?
我可以通過該代碼獲得'This':$html1 = strstr($html, '<p', true);
但我不知道如何繼續分割以及如何爲具有多根針的可變字符串(至少2個不同的針)執行此操作。你能幫我嗎?
你可以使用preg_split
有一些選項($s
被輸入的字符串):
preg_split("#\s*(<p>.*?</p>)\s*#", $s, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
這返回一個數組。爲您的樣品輸入返回:
["This", "<p>is</p>", "a", "<p>string</p>"]
看到它在repl.it
這是一個很好的解決方案。不知道'preg_split'是如此強大。請注意,由於使用'#'作爲正則表達式的末端括號,因此不需要轉義'/'。 – BeetleJuice
謝謝@BeetleJuice。刪除了逃生。 – trincot
因爲你的針很複雜,你可以使用preg_match_all
:
$html = 'This <p>is</p> a <p>string</p>';
// Regex to group by paragraph and non-paragraph
$pattern = '/(.*?)(<p>.+?<\/p>)/';
// Parse HTML using the pattern and put result in $matches
preg_match_all($pattern,$html,$matches, PREG_SET_ORDER);
// Will contain the final pieces
$pieces = [];
// For each $match array, the 0th member is the full match
// every other member is one of the pieces we want
foreach($matches as $m) while(next($m)) $pieces[] = trim(current($m));
print_r($pieces);// ['This', '<p>is</p>', 'a', '<p>string</p>']
運行難道只爲'p'標籤? – revo
如果你只是想要你的'p'標籤,你可以使用REGEX捕獲'
*
' – sheplu來分割你的字符串。我建議你想出一些可以使用捕獲組的正則表達式來實現的規則。 – Juan