2011-12-09 4 views
0

배열 3에 언어에 16 진수 코드가 아닌 다음과 같은 문제가 있습니다. 배열 4에 이 있습니다. 오디오 코덱 만 16 진수 값이나 다른 것과 같지 않게하고 싶습니다.PHP 정규식 패턴 문자열이 필요합니다

나는 모든 해결책을 가지고 있지만 모두 잘못되었습니다. 누군가 나를 도울 수 있습니까? 여기

Stream #0:1[0x1100](ger): Audio: dts (DTS) ([130][0][0][0]/0x0082), 48000 Hz, 5.1(side), s16, 1536 kb/s 
Stream #0:2(eng): Audio: dts (DTS-HD MA) ([134][0][0][0]/0x0086), 48000 Hz, 5.1(side), s16, 1536 kb/s 
Stream #0:3: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, 192 kb/s 
Stream #1:0: Audio: mp2, 41000 Hz, stereo, 48 kb/s 

가 내 정규식

다음
/Stream #([0-9\.]+)?:([0-9\.]+).([A-Za-z][A-Za-z]*)?.+Audio: ([^,]+?), ([0-9]+) Hz, ?([^\n,]*)/ 

출력 배열입니다 : 당신은 단지 바로 코덱을 일치 시키려면

Array 
(
[0] => Array 
    (
     [0] => Stream #0:1[0x1100](ger): Audio: dts (DTS) ([130][0][0][0]/0x0082), 48000 Hz, 5.1(side) 
     [1] => Stream #0:2(eng): Audio: dts (DTS-HD MA) ([134][0][0][0]/0x0086), 48000 Hz, 5.1(side) 
     [2] => Stream #0:3: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo 
     [3] => Stream #1:0: Audio: mp2, 41000 Hz, stereo 
    ) 

[1] => Array 
    (
     [0] => 0 
     [1] => 0 
     [2] => 0 
     [3] => 1 
    ) 

[2] => Array 
    (
     [0] => 1 
     [1] => 2 
     [2] => 3 
     [3] => 0 
    ) 

[3] => Array 
    (
     [0] => 
     [1] => eng 
     [2] => 
     [3] => 
    ) 

[4] => Array 
    (
     [0] => dts (DTS) ([130][0][0][0]/0x0082) 
     [1] => dts (DTS-HD MA) ([134][0][0][0]/0x0086) 
     [2] => mp2 ([3][0][0][0]/0x0003) 
     [3] => mp2 
    ) 

[5] => Array 
    (
     [0] => 48000 
     [1] => 48000 
     [2] => 48000 
     [3] => 41000 
    ) 

[6] => Array 
    (
     [0] => 5.1(side) 
     [1] => 5.1(side) 
     [2] => stereo 
     [3] => stereo 
    ) 

) 

답변

1

자유 형식의 구문 분석을 할 때 단서를 얻으 려합니다. 일반적으로 생성 프로그램을 볼 수 없기 때문에 작은 샘플 텍스트에만 기반하여 부적절합니다.

이 점을 고려하면 기본 우려 사항이 해결 될 수 있습니다. 하지만 몇 가지 알려진 간단한 부분으로 분해 한 다음 개별적으로 구문 분석합니다.

Stream[ ]+\# 
([0-9.]+)? : ([0-9.]+)   # 1,2 title : chapter 
[^:(]* (?:\(([^)]*)\))?  # 3 language 
[^:]* : 
[ ]* Audio: 
[^(\w,]* (\w*)     # 4 aud codec 
[^,]* , 
[ ]*([0-9]*)[ ]* (?i:[mkhz]+) # 5 aud frequency 
[^,]* , 
[ ]* ([^\n,]*)     # 6 aud chan's 
+0

당신의 나의 영웅 ^^ : =) –

+0

많은 감사합니다. –

1

여기

는 정규식 데이터입니다 이름을 Audio: 다음에 불필요한 모든 일치 그룹을 제거하고 영숫자를 찾습니다.

/Stream #([0-9\.]+)?:([0-9\.]+).([A-Za-z][A-Za-z]*)?.+Audio: (\w+)/ 

strtok($value, " ")을 사용하면 첫 번째 부분을 결과 배열 항목에서 분리 할 수 ​​있습니다.

+0

아니 나는 모든 정규식 값을 필요로하지만, 어레이 인덱스 3 만 언어의 이름의 어레이 인덱스 4 만 상기 오디오 코덱의 예 [0] => DTS [1] => DTS 등 –

+2

아하에서 흥미로운 . 그리고 어떻게이 정규식이 그렇게하지 않습니까? – mario