$str = "[02:55.57][01:04.94]谁在用琵琶弹奏一曲东风破";
$reg ="/(\[\d{2}:\d{2}.\d{2}\])+/iU";
preg_match_all($reg, $str, $out);
print_r ($out[1]);
$reg ="/(\[\d{2}:\d{2}.\d{2}\])+/iU";
preg_match_all($reg, $str, $out);
print_r ($out[1]);
$reg ="/(\[\d{2}:\d{2}.\d{2}\])+/iU";
preg_match_all($reg, $str, $out);
print_r ($out[1]);
$reg = "/(\[(\d{2}):(\d{2})\.(\d{2})\])+(.*)/iU";
preg_match_all($reg, $line, $out);
print_r ($out[1]);
这样怎么还是不行
$out[1]
0 => [02:55.57]
1 => [01:04.94]
$out[5]
0=>谁在用琵琶弹奏一曲东风破;
$str = "[02:55.57][01:04.94]谁在用琵琶弹奏一曲东风破";
$reg = "/(\[\d{2}:\d{2}\.\d{2}\])/";
preg_match_all($reg, $str, $out);
print_r ($out[1]);
?>原因如下:
$reg = "/(\[\d{2}:\d{2}\.\d{2}\])/";
时,将分别匹配两个[...]成分
若print_r ($out[1]);可得
Array
(
[0] => Array
(
[0] => [02:55.57]
[1] => [01:04.94]
) [1] => Array
(
[0] => [02:55.57]
[1] => [01:04.94]
)
)而
$reg = "/(\[\d{2}:\d{2}\.\d{2}\])+/";
时,注意后面的+。这个+表示匹配一个以上的相同成分
此时print_r ($out[1]);可得
Array
(
[0] => Array
(
[0] => [02:55.57][01:04.94]
) [1] => Array
(
[0] => [01:04.94]
)
)
$str = "[02:55.57][01:04.94]谁在用琵琶弹奏一曲东风破";
$reg = "/(\[\d{2}:\d{2}\.\d{2}\])(\[\d{2}:\d{2}\.\d{2}\])([^[[].+)/";
preg_match_all($reg, $str, $out);
print_r ($out);
?>
三个成员都要的话得写成这样
$out[1]
0 => [02:55.57]
1 => [01:04.94]
$out[5]
0=>谁在用琵琶弹奏一曲东风破;
就是前面的数字部分用一个数组来保存,每个元素都是一个类似“[01:04.94]”的字符串。
而后面的汉字用一个数组来保存,
我现在还是无法理解,我一开始的输出结果$str = "[02:55.57][01:04.94]谁在用琵琶弹奏一曲东风破";
$reg ="/(\[\d{2}:\d{2}.\d{2}\])+/i";
preg_match_all($reg, $str, $out);
print_r ($out[1]);我原以为$out[1]有两个元素
0 => [02:55.57]
1 => [01:04.94]
现在只有后面一个 是这样
0 => [01:04.94]
[02:55.57]不也是符合第一个子模式的吗。为什么数组里没有呢
(\[\d{2}:\d{2}.\d{2}\])+这个子模式是一个或多个[xx:xx.xx],也就是说,无论有多少次,只要是两个连在一起的,它都认为是一个的,并且它会输出符合子模式的字符串的最后一个[xx:xx.xx]。