簡體   English   中英

匹配字符串正則表達式

[英]Matching string regular expression

我想匹配如下字符串中的數據:

24.Legacy.S01E08.720p.HDTV.x264-AVS [rarbg]

Colony.S02E09.720p.HDTV.x264-FLEET [rarbg]

  • 24.舊版(S01E08之前的所有內容)
  • S => 01
  • E => 08
  • 720p.HDTV.x264(介於S01E08和-之間的所有內容)
  • AVS(介於-之間的所有內容[]
  • rarbg([之間的所有內容)

以下測試幾乎可以正常運行,但需要進行一些調整:

preg_match_all(
    '/(.*?).S([0-9]+)E([0-9]+).(.*?)(.*?)[(.*?)]/s',
    $download,
    $posts,
    PREG_SET_ORDER
);

您是如此接近,您只需要為需求的后半部分添加測試:

(.*?).S([0-9]+)E([0-9]+).(.*?)-(.*?)\[(.*?)\]

https://regex101.com/r/PfgMfq/1

您不需要/ s修飾符,它擴展了。 匹配元字符和換行符。 我建議使用/ e修飾符還允許使用小寫字母's01e14'。不要忘記轉義正則表達式字符。 與 \\。 和\\ [

//         NAME  SEASON   EPISOE   MEDIUM  OPTIONS
$regex = '/(.+)\.S([0-9]+)E([0-9]+)\.(.+)\[(.+)\]/i';
preg_match_all(
    $regex,
    $download,
    $posts,
    PREG_SET_ORDER
);

使用“ 24.Legacy.S01E08.720p.HDTV.x264-AVS [rarbg]”進行測試

Array
(
    [0] => 24.Legacy.S01E08.720p.HDTV.x264-AVS[rarbg]
    [1] => 24.Legacy
    [2] => 01
    [3] => 08
    [4] => 720p.HDTV.x264-AVS
    [5] => rarbg
)

只需寫下來然后:)

^
(?P<title>.+?)         # title
S(?P<season>\d+)       # season
E(?P<episode>\d+)\.    # episode
(?P<quality>[^-]+)-    # quality
(?P<type>[^[]+)        # type
\[
    (?P<torrent>[^]]+) # rest
\]
$

regex101.com上的演示

如果零件是可選的,只需在其周圍添加一些( )和一個? 在它后面,像這樣

//         NAME  SEASON   EPISOE   MEDIUM  OPTIONS
$regex = '/(.+)\.S([0-9]+)E([0-9]+)\.(.+)(\[(.+)\])?/i';

但要注意更改$match索引

Array
(
    [0] => 24.Legacy.S01E08.720p.HDTV.x264-AVS[rarbg]
    [1] => 24.Legacy
    [2] => 01
    [3] => 08
    [4] => 720p.HDTV.x264-AVS
    [5] => [rarbg]
    [6] => rarbg
)

如果您不需要rarbg值,則可以跳過內部()

//         NAME  SEASON   EPISOE   MEDIUM  OPTIONS
$regex = '/(.+)\.S([0-9]+)E([0-9]+)\.(.+)(\[.+\])?/i';

暫無
暫無

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

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