似乎在我的PHP代码中得到了与在线编辑器非常不同的输出,以下网站都显示我的模式和字符串应该匹配。。。它显示它在以下网站中匹配:
http://www.phpliveregex.com/
https://regex101.com/
有人能在这里发现问题吗?
图案
$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正则表达式与其他引擎的区别,但phpliveredex给出了与上面尝试的语法完全相同的语法($output_array
),并且它的返回与预期完全相同。
请帮忙!
在正则表达式中使用'n
字符(新行)。您必须确保在示例字符串中(当然还有正则表达式中,这取决于您实际想要匹配的内容)有正确的行尾。
将您的示例PHP代码复制到PSPad,然后选择Format->Unix(LF),然后将结果保存到填充的$output_array
中。
如果要匹配windows样式的行尾,请将'n
替换为'r'n
。
好吧,看起来我的$buffer
有误导性。我把它粘贴在这里,它不像我在代码中那样有缩进,是缩进中的额外字符导致了问题。
我不想捣乱,但我现在不想对正则表达式的变量使用双引号——以防万一。达到预期结果。