[英]PHP Regex Pattern Need String
我在数组3中需要以下问题,语言名称不是数组4上的十六进制代码我只想要音频编解码器,而不是像十六进制值或其他东西。
我没有解决方案我已经测试过但都错了。 有人能帮我吗 ?
这是正则表达式数据:
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
)
)
如果您只想匹配Audio:
之后的直接编解码器名称Audio:
然后删除所有无关的匹配组,只需查找字母数字字符:
/Stream #([0-9\.]+)?:([0-9\.]+).([A-Za-z][A-Za-z]*)?.+Audio: (\w+)/
您也可以使用strtok($value, " ")
从结果数组条目中拆分出第一部分。
在自由格式解析时,人们试图获得提示。 它通常仅基于小样本文本而不足,因为您无法看到生成程序。
考虑到这一点,这可能会解决您的基本问题。 但是我会把它分解成几个已知的简单部分,然后分别解析它们。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.