簡體   English   中英

正則表達式獲取更多字符

[英]Regex grabbing extra character

我使用以下正則表達式使用PHP preg_replace

/(?<=#EXTINF:([0-9])+,).+?(?=#EXT)/gsm

對以下字符串進行操作:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:10,
Grab_this_string
#EXTINF:5,
Grab_this_string_too
#EXT-X-ENDLIST

它代替:

, Grab_this_string 
Grab_this_string_too

我正在嘗試不使用第一個逗號(基本上是#EXTINF:xx,和下一個#EXTINF之間的所有內容)進行匹配:

Grab_this_string 
Grab_this_string_too

由於您處於多行模式,因此可以匹配行尾以描繪每行。

這匹配兩行,並僅用第一行替換它們(有效地刪除了第二行)。 請注意我已經刪除“DOTALL”模式( s )。

$regex = '/(^#EXTINF:\d+,$)(\s+)^.+$(?=\s+^#EXT)/m';

echo preg_replace($regex, '$1', $str);

輸出:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:10,
#EXTINF:5,
#EXT-X-ENDLIST

更新:

使用lookbehind將不起作用,因為它需要可變長度的匹配,這在大多數正則表達式引擎(包括PHP使用的PCRE)中均不受支持。

如果您只想捕獲要刪除的行,而不必像上面一樣用子模式匹配替換兩條行,則可以使用\\K轉義序列來模擬不受可變長度限制的后向。 \\K重置比賽的開始位置,因此\\K之前匹配的所有內容都不會包含在最終比賽中。 (請參見此處最后一段 。)

$regex = '/^#EXTINF:\d+,\s+\K^.+?(?=#EXT)/sm';

echo preg_replace($regex, '', $str);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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