我正在解析shell_exec
,我得到了一系列结果字符串,我将与其他来源的数据进行比较。
输入shell文本包含ANSI彩色文本,我似乎无法解析。因此,我无法进行基本的字符串比较,更不用说我计划的in_array
了。
我试图将preg_replace
与许多PCRE类(print,cntrl等)以及strcmp
和strtolower
之类的简单事物一起使用,但都无济于事。< / p>
我确定我错过了一些愚蠢的东西,但我无法弄清楚我错过了哪些蠢事。
答案 0 :(得分:5)
淘汰ANSI序列:
preg_replace("/\e.*?[a-zA-Z]/", '', $str);
我相信你将永远拥有&#34;逃避,争论,命令&#34;其中命令是字母,参数numeric由冒号(如果多于一个)分隔。
答案 1 :(得分:1)
把它扔到那里。 cat -vet
非常适合诊断,但有时它可以直接处理非瓷器输出。
给它一个旋转:
$output = shell_exec("$cmd | cat -vet");
$output = preg_replace('/\^\[\[\d+m/', '', $output);
cat -vet
正在将转义码转换为单个可打印字符,然后您可以将其作为实际字符本身处理。
如果您的输出具有合法^]
和其他类似序列,则此方法无法正常工作。最好使用与@Amadan答案中的实际转义码匹配的PCRE。但是如果你需要快速和肮脏的东西,这可能会有效。