1. Parse the following text:
2. Move the third set of lines, i.e.:#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=80000 80.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000 400.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000 700.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1500000 1500.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2500000 2500.m3u8
to the top, right under #EXTM3U, so that it would show up as line 2. The other lines should be kept the same, just shifted down.#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000 700.m3u8
I've written the following:
which yields:$text = <<'LIST'; #EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=80000 80.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000 400.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000 700.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1500000 1500.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2500000 2500.m3u8 LIST $text =~ m{ (\#EXT-X-STREAM-INF:PROGRAM-ID= \d+, BANDWIDTH=\d+ \s* \d+\.m3u8) }xms; print "1 - $1, 2 - $2, 3 - $3\n";
However, I'm not sure how to specify in the regex to split by: a) the first chunk being the top two entries, b) the second chunk being what I want to move, c) the last chunk. I figure once I have that, it's a simple matter of specifying $1, $2 and $3 in the replacement part of the regex.# ./test.pl 1 - #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=80000 80.m3u8, 2 - , 3 -
Note that I realize I could split this into an array, but I'm trying to find an efficient regex to do the job here. Thoughts?
-- Burvil
In reply to Multiline regex for moving lines? by bowei_99
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |