【发布时间】:2014-05-10 16:35:56
【问题描述】:
我有以下代码:
$pattern_dig_answer = array(); // Identify patterns to replace and their replacements
$pattern_dig_answer[0] = "/(.*)IN(\s+)A(.*)/";
$replacement_dig_answer = array();
$replacement_dig_answer[0] = "<span style='color:red;'>$1IN$2A$3</span>";
pattern_dig_answer 数组的第一个条目是我要匹配的模式的一些正则表达式。 replacement_dig_answer 的第一个条目是我要替换正则表达式找到的内容。
然后我像这样执行挖掘:
$dig_answer = exec("dig {$_SESSION['domain']} $digrecords[2] $digops[0] $digops[1] $digops[2] $digops[3]", $dig_answer_raw);
您可能猜到了,它使用从用户输入捕获的会话变量执行 dig 命令,然后将输出保存到 $dig_answer_raw。
我现在要做的是使用以下内容清理挖掘:
$dig_answer_out = preg_grep('/IN/', $dig_answer_raw);
然后我回显结果:
echo implode("\n", $dig_answer_out);
到目前为止,这一切都很好。只有当我执行以下操作时才会卡住:
echo preg_replace($pattern_dig_answer, $replacement_dig_answer, $dig_answer_out);
现在,根据我所做的调查,这应该可行。 preg_replace 的文档清楚地表明它可以在普通字符串中搜索,也可以通过带有字符串条目的数组进行搜索(我假设我有)。是什么让我认为我可能不会,因为我将 dig 命令更改为:
$dig_answer = shell_exec("dig {$_SESSION['domain']} $digrecords[2] $digops[0] $digops[1] $digops[2] $digops[3]");
它的作用就像一个魅力,但是即使在改变所有变量之后,也会否定 preg_grep 之前所做的所有输出清理。
我在这里遗漏了什么非常明显的东西吗?
编辑:为了尝试简化我的问题,当我的 dig 命令从将输出保存到数组的 exec() 更改为将输出保存到字符串的 shell_exec 时,preg_replace 就可以工作了。它似乎不想在数组中工作,我不确定为什么......
【问题讨论】:
-
"然而,即使在更改了所有变量之后,preg_grep 之前所做的所有输出清理也会被否定。" — 你的意思是什么?
-
当我将 dig 命令替换为:
$dig_answer = shell_exec("dig {$_SESSION['domain']} $digrecords[2] $digops[0] $digops[1] $digops[2] $digops[3]");然后:echo preg_replace($pattern_dig_answer, $replacement_dig_answer, $dig_answer_out);它可以工作。 -
you're first 'pattern_dig_answer' 缺少美元符号
-
@chiliNUT 恐怕我的复制/粘贴技能失败了。感谢您指出这一点。我现在会修补它。
-
@id0827502:那我不知道你在问什么。您可以编辑问题以包含 just 不起作用的部分吗?我认为这有助于澄清您的要求。