2014-06-16 2 views
0

문자열에서 모든 비디오 화질을 얻고 싶습니다. 내 문자열 :정규식을 사용하여 텍스트 블록에서 모든 비디오 품질 가져 오기

#EXTM3U 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000 
128/prog_index.m3u8?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=750000 
500/prog_index.m3u8?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000 
750/prog_index.m3u8?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1250000 
1000/prog_index.m3u8?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1750000 
1500/prog_index.m3u8?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2750000 
2500/prog_index.m3u8?key=49bfee85b05d117a2906368428094e94 

그리고 내 PHP 코드 :

preg_match_all("/(.*?)\/prog_index.m3u8/mis", $serviceurlget, $C); 
print_r($C); 

결과 :

Array 
(
    [0] => Array 
     (
      [0] => #EXTM3U 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000 
128/prog_index.m3u8 
      [1] => ?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=750000 
500/prog_index.m3u8 
      [2] => ?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000 
750/prog_index.m3u8 
      [3] => ?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1250000 
1000/prog_index.m3u8 
      [4] => ?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1750000 
1500/prog_index.m3u8 
      [5] => ?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2750000 
2500/prog_index.m3u8 
     ) 

    [1] => Array 
     (
      [0] => #EXTM3U 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000 
128 
      [1] => ?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=750000 
500 
      [2] => ?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000 
750 
      [3] => ?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1250000 
1000 
      [4] => ?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1750000 
1500 
      [5] => ?key=49bfee85b05d117a2906368428094e94 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2750000 
2500 
     ) 

) 

하지만 이러한 결과를 원하지 않는다. 나는 그것이 128 500 750 1000 1500 2500을 돌려주고 싶다. 내가 어떻게 해? 나는 explode() 함수를 시도했다. 그러나 그것은 효과가 없었습니다. 내 정규식 코드에 실수가 있다고 생각합니다.

답변

2

preg_match_all() 문에서 ms 수정자를 제거하십시오. 이 수정자는 패턴이 대상 문자열과 일치하는 방법에 영향을, 항상 필요하지 않습니다 :

  • m 수정이의 시작/끝 부분에 일치 "에서 라인 앵커 (^$)의 의미를 변경 문자열 "to"는 각 라인 "의 시작/끝에 일치합니다. 주체 문자열에 줄 바꿈 문자가 없거나 정규식 패턴에서 줄 괄호가 나타나지 않으면이 수식어는 쓸모가 없습니다.

  • s 수정은 " 개행 문자를 포함하여 모든 일치"로 "줄 바꿈 문자를 제외한 모든 일치"의 점 메타 문자 (.)의 의미를 변경합니다. 이렇게하면 전체 문자열을 한 줄로 처리 할 수 ​​있습니다.

자세한 내용은 PHP manual documentation on Pattern Modifiers을 참조하십시오.


코드는해야한다 :

preg_match_all("/(.*?)\/prog_index\.m3u8/i", $serviceurlget, $C); 
print_r($C[1]); 

출력 : 완벽한 세부의 양, 아름답게 형식으로

Array 
(
    [0] => 128 
    [1] => 500 
    [2] => 750 
    [3] => 1000 
    [4] => 1500 
    [5] => 2500 
) 

Demo

+1

대답. :) +1 – zx81

관련 문제