Php 在正则表达式中获得最接近的匹配
我试图在正则表达式中找到两个单词之间最接近的匹配 下面是我正在尝试做的一个示例: 问题是Php 在正则表达式中获得最接近的匹配,php,regex,Php,Regex,我试图在正则表达式中找到两个单词之间最接近的匹配 下面是我正在尝试做的一个示例: 问题是“曲目编号”将找到第一个匹配项并继续查找“字幕” 我需要的只是grep Track number: 3 (track ID for mkvmerge & mkvextract: 2) | + Track UID: 1382186431 | + Track type: subtitles 所以基本上grep最接近“音轨号”的“字幕”单词 但我不知道该怎么办希望这能帮到你 解决方案1:< /强>
“曲目编号”
将找到第一个匹配项并继续查找“字幕”
我需要的只是grep
Track number: 3 (track ID for mkvmerge & mkvextract: 2)
| + Track UID: 1382186431
| + Track type: subtitles
所以基本上grep最接近“音轨号”
的“字幕”
单词
但我不知道该怎么办希望这能帮到你
<强>解决方案1:< /强> <代码>棘手的解决方案(为了测试目的,我在中间添加了一个示例字符串,以显示此解决方案工作正常)。< /代码> < /P>
$string='”
+EBML头
|+EBML版本:1
|+EBML读取版本:1
|+EBML最大ID长度:4
|+EBML最大尺寸长度:8
|+文件类型:matroska
|+单据类型版本:2
|+文件类型读取版本:2
+分段,尺寸627752082
|+搜索头(将跳过子项)
|+EbmlVoid(尺寸:4044)
|+段信息
|+时码刻度:1000000
|+Muxing应用程序:libebml v1.0.0+libmatroska v1.0.0
|+编写应用程序:mkvmerge v4.1.1(\'Bouncin\'Back\')构建于2010年7月3日22:54:08
|+持续时间:7279.440秒(02:01:19.440)
|+日期:星期六2010年9月18日15:52:16 UTC
|+段UID:0x83 0x63 0x0c 0xd7 0x2c 0xb9 0x73 0xb5 0xab 0x7f 0xd0 0xa4 0x3d 0x1c 0xf9 0xf6
|+分段轨道
|+轨道
|+轨道编号:1(mkvmerge和mkvextract的轨道ID:0)
|+轨道UID:1383154402
|+曲目类型:视频
|+系带标志:0
|+MinCache:1
|+编解码器ID:V_MPEG4/ISO/AVC
|+CodecPrivate,长度45(h.264配置文件:Main@L3.1)
|+默认持续时间:40.000ms(视频曲目每秒25.000帧/场)
|+视频曲目
|+像素宽度:1280
|+像素高度:696
|+显示宽度:1280
|+显示高度:696
|+轨道
|+轨道编号:2(mkvmerge和mkvextract的轨道ID:1)
|+轨道UID:3159569538
|+曲目类型:音频
|+编解码器ID:A_AAC
|+编解码器专用,长度2
|+默认持续时间:21.333ms(视频曲目每秒46.875帧/场)
|+音轨
|+采样频率:48000
|+频道:2
|+轨道
|+轨道编号:3(mkvmerge和mkvextract的轨道ID:2)
|+轨道UID:3633586111
|+曲目类型:字幕
|+系带标志:0
|+编解码器ID:S_TEXT/UTF8
|+轨道
|+轨道编号:4(mkvmerge和mkvextract的轨道ID:3)
|+轨道UID:1098098602
|+曲目类型:字幕
|+默认标志:0
|+系带标志:0
|+编解码器ID:S_TEXT/UTF8
|+语言:dut
|+轨道
|+轨道编号:5(mkvmerge和mkvextract的轨道ID:4)
|+轨道UID:2228128442
|+曲目类型:字幕
|+默认标志:0
|+系带标志:0
|+编解码器ID:S_TEXT/UTF8
|+语言:fre
|+轨道
|+轨道编号:6(mkvmerge和mkvextract的轨道ID:5)
|+轨道UID:1507679374
|+曲目类型:字幕
|+默认标志:0
|+系带标志:0
|+编解码器ID:S_TEXT/UTF8
|+语言:ita
|+轨道
|+轨道编号:7(mkvmerge和mkvextract的轨道ID:6)
|+轨道UID:3667538853
|+曲目类型:字幕
|+默认标志:0
|+系带标志:0
|+编解码器ID:S_TEXT/UTF8
|+语言:swe
|+EbmlVoid(尺寸:1239)
|+簇
';
$result=null;
$matched=false;
对于($x=0;$x希望这能帮到你
<强>解决方案1:< /强> <代码>棘手的解决方案(为了测试目的,我在中间添加了一个示例字符串,以显示此解决方案工作正常)。< /代码> < /P>
$string='”
+EBML头
|+EBML版本:1
|+EBML读取版本:1
|+EBML最大ID长度:4
|+EBML最大尺寸长度:8
|+文件类型:matroska
|+单据类型版本:2
|+文件类型读取版本:2
+分段,尺寸627752082
|+搜索头(将跳过子项)
|+EbmlVoid(尺寸:4044)
|+段信息
|+时码刻度:1000000
|+Muxing应用程序:libebml v1.0.0+libmatroska v1.0.0
|+编写应用程序:mkvmerge v4.1.1(\'Bouncin\'Back\')构建于2010年7月3日22:54:08
|+持续时间:7279.440秒(02:01:19.440)
|+日期:星期六2010年9月18日15:52:16 UTC
|+段UID:0x83 0x63 0x0c 0xd7 0x2c 0xb9 0x73 0xb5 0xab 0x7f 0xd0 0xa4 0x3d 0x1c 0xf9 0xf6
|+分段轨道
|+轨道
|+轨道编号:1(mkvmerge和mkvextract的轨道ID:0)
|+轨道UID:1383154402
|+曲目类型:视频
|+系带标志:0
|+MinCache:1
|+编解码器ID:V_MPEG4/ISO/AVC
|+CodecPrivate,长度45(h.264配置文件:Main@L3.1)
|+默认持续时间:40.000ms(视频曲目每秒25.000帧/场)
|+视频曲目
|+像素宽度:1280
|+像素高度:696
|+显示宽度:1280
|+显示高度:696
|+轨道
|+轨道编号:2(mkvmerge和mkvextract的轨道ID:1)
|+轨道UID:3159569538
|+曲目类型:音频
|+编解码器ID:A_AAC
|+编解码器专用,长度2
|+默认持续时间:21.333ms(视频曲目每秒46.875帧/场)
|+音轨
|+采样频率:48000
|+频道:2
|+轨道
|+轨道编号:3(mkvmerge和mkvextract的轨道ID:2)
|+轨道UID:3633586111
|+曲目类型:字幕
|+系带标志:0
|+编解码器ID:S_TEXT/UTF8
|+轨道
|+轨道编号:4(mkvmerge和mkvextract的轨道ID:3)
|+轨道UID:1098098602
|+曲目类型:字幕
|+默认标志:0
|+系带标志:0
|+编解码器ID:S_TEXT/UTF8
|+语言:dut
|+轨道
|+轨道编号:5(mkvmerge和mkvextract的轨道ID:4)
|+轨道UID:2228128442
|+曲目类型:字幕
|+默认标志:0
|+系带标志:0
|+编解码器ID:S_TEXT/UTF8
|+语言:fre
|+轨道
|+轨道编号:6(mkvmerge和mkvextract的轨道ID:5)
|+轨道UID:1507679374
|+曲目类型:字幕
|+默认标志:0
|+系带标志:0
|+编解码器ID:S_TEXT/UTF8
|+语言:ita
|+轨道
|+轨道编号:7(mkvmerge和mkvextract的轨道ID:6)
|+轨道UID:3667538853
|+曲目类型:字幕
|+默认标志:0
|+系带标志:0
|+编解码器ID:S_TEXT/UTF8
|+语言:swe
|+EbmlVoid(尺寸:1239)
|+簇
';
$result=null
$string='"
+ EBML head
|+ EBML version: 1
|+ EBML read version: 1
|+ EBML maximum ID length: 4
|+ EBML maximum size length: 8
|+ Doc type: matroska
|+ Doc type version: 2
|+ Doc type read version: 2
+ Segment, size 627752082
|+ Seek head (subentries will be skipped)
|+ EbmlVoid (size: 4044)
|+ Segment information
| + Timecode scale: 1000000
| + Muxing application: libebml v1.0.0 + libmatroska v1.0.0
| + Writing application: mkvmerge v4.1.1 (\'Bouncin\' Back\') built on Jul 3 2010 22:54:08
| + Duration: 7279.440s (02:01:19.440)
| + Date: Sat Sep 18 15:52:16 2010 UTC
| + Segment UID: 0x83 0x63 0x0c 0xd7 0x2c 0xb9 0x73 0xb5 0xab 0x7f 0xd0 0xa4 0x3d 0x1c 0xf9 0xf6
|+ Segment tracks
| + A track
| + Track number: 1 (track ID for mkvmerge & mkvextract: 0)
| + Track UID: 1383154402
| + Track type: video
| + Lacing flag: 0
| + MinCache: 1
| + Codec ID: V_MPEG4/ISO/AVC
| + CodecPrivate, length 45 (h.264 profile: Main @L3.1)
| + Default duration: 40.000ms (25.000 frames/fields per second for a video track)
| + Video track
| + Pixel width: 1280
| + Pixel height: 696
| + Display width: 1280
| + Display height: 696
| + A track
| + Track number: 2 (track ID for mkvmerge & mkvextract: 1)
| + Track UID: 3159569538
| + Track type: audio
| + Codec ID: A_AAC
| + CodecPrivate, length 2
| + Default duration: 21.333ms (46.875 frames/fields per second for a video track)
| + Audio track
| + Sampling frequency: 48000
| + Channels: 2
| + A track
| + Track number: 3 (track ID for mkvmerge & mkvextract: 2)
| + Track UID: 3633586111
| + Track type: subtitles
| + Lacing flag: 0
| + Codec ID: S_TEXT/UTF8
| + A track
| + Track number: 4 (track ID for mkvmerge & mkvextract: 3)
| + Track UID: 1098098602
| + Track type: subtitles
| + Default flag: 0
| + Lacing flag: 0
| + Codec ID: S_TEXT/UTF8
| + Language: dut
| + A track
| + Track number: 5 (track ID for mkvmerge & mkvextract: 4)
| + Track UID: 2228128442
| + Track type: subtitles
| + Default flag: 0
| + Lacing flag: 0
| + Codec ID: S_TEXT/UTF8
| + Language: fre
| + A track
| + Track number: 6 (track ID for mkvmerge & mkvextract: 5)
| + Track UID: 1507679374
| + Track type: subtitles
| + Default flag: 0
| + Lacing flag: 0
| + Codec ID: S_TEXT/UTF8
| + Language: ita
| + A track
| + Track number: 7 (track ID for mkvmerge & mkvextract: 6)
| + Track UID: 3667538853
| + Track type: subtitles
| + Default flag: 0
| + Lacing flag: 0
| + Codec ID: S_TEXT/UTF8
| + Language: swe
|+ EbmlVoid (size: 1239)
|+ Cluster
';
$result=null;
$matched=false;
for($x=0;$x<substr_count($string, "|");$x++)
{
preg_match_all("/Track number(?:.*?[\|]){".$x."}/s", $string,$matches);
foreach($matches[0] as $match)
{
if(preg_match_all("/Track number.*?subtitles/s", $match,$matches))
{
$result[]=$matches[0];
$matched=true;
}
}
if($matched==true)
{
break;
}
}
print_r($result);
Track number: 3 (track ID for mkvmerge & mkvextract: 2)
| + Track UID: 1382186431
| + Track type: subtitles
---- Other tracks in between ----
Track number: 3 (track ID for mkvmerge & mkvextract: 7)
| + Track UID: 1887396985
| + Track type: subtitles