preg_match 让一条不需要的线溜过

preg_match lets an unwanted line slip through

我正在使用 preg_match 将条件放在线上,以便在循环中处理。 这是我的代码:

$import = 'LT_VALUES2';
$contents = explode('-',$import,2);
$line = 'DATA LT_VALUES2 TYPE TABLE OF RGSB4 WITH HEADER LINE,';
if(preg_match('/(DATA $import)/i',$line) == 0 && preg_match("/($import\b|$contents[0]\W)/i",$line) == 1 && preg_match("/[']/",$import) == 0 && preg_match("/(\D)/",$import) == 1)
{

无缘无故到达这里

}

为什么无法处理我提供的条件?我在 phptester.net 测试了相同的代码,它按我想要的方式工作

单引号字符串不会插入变量,这可能正是您所期望的。

'/(DATA $import)/i' 字面意思是 /(DATA $import)/i.

另一方面;

"/(DATA $import)/i" 将插值到 /(DATA LT_VALUES2)/i