【发布时间】:2015-05-27 06:30:10
【问题描述】:
我的 PHP 代码中的在线编辑器似乎得到了非常不同的输出,以下网站都显示我的模式和字符串应该匹配......它表明它在以下网站中匹配:
有人可以在这里发现问题吗?
模式
$a= "/H(\d{7})_([\d\w]*)\n([\n\w\.]*?)V($b)_(\d)_(\d)_(\d*)(_([a-z_\d]*)($c)($c))/";
注意 $b & $c 中变量的使用
字符串
$buffer = "H2241008_1211901000000013220
R001_1
W1443.91
Maa_01D11100000000000016210053_W802.83
Mab_02D21100000000000024210054_W1323.18
Mzz_00000000000000000000000000_W0.00
T1_
V15_0_1_1210_aa225400225459_aa233900234159
V16_0_1_1210_ab192500205059_aa225500225659
V17_0_1_1210_aa225100225359_aa234200234659
V18_0_1_1210_aa224900225059_aa233800233859_aa234700240159
V19_0_1_1210_aa224400224459_aa230400230459
V303_0_1_1210_aa225700230359_aa232700233759
V402_0_1_1210_aa230800232359_aa232600232659
V450_0_1_1210_aa224500224859
V614_0_1_1210_aa224300224359_aa230500230759_aa232400232559
V65535_0_1_1210_ab192500205059_aa224300240159";
$buffer = str_replace("\r\n", "\n", $buffer);
获取匹配项
preg_match_all($a, $buffer, $matches);
preg_match_all("/H(\d{7})_([\d\w]*)\n([\n\w\.]*?)V(15)_(\d)_(\d)_(\d*)(_([a-z_\d]*)(2254[0-9]{2}|500)(2254[0-9]{2}|500))/", $buffer, $output_array);
var_dump($matches);
var_dump($output_array);
我已经尝试了两种方法(检查语法与是否使用模式字符串中的变量),因为我认为$、\w、\n 等会妨碍,但两者都像这样返回:
array(12) { [0]=> array(0) { } [1]=> array(0) { } [2]=> array(0) { } [3]=> array(0) { } [4]=> array(0) { } [5]=> array(0) { } [6]=> array(0) { } [7]=> array(0) { } [8]=> array(0) { } [9]=> array(0) { } [10]=> array(0) { } [11]=> array(0) { } }
我的期望;就是得到一个火柴,有11个零件。我认为这可能是 PHP 正则表达式与其他引擎的差异,但 phpliveregex 给出了与上面尝试的完全相同的语法 ($output_array),并且它完全按预期返回。
请帮忙!
【问题讨论】:
-
$b和$c对于给定的示例缓冲区有什么值? -
使用第二行
preg_match_all中的实际值:$b = 15 和 $c = 2254[0-9]{2}|500
标签: php regex preg-match-all