比较彩色字符串PHP

时间:2015-08-11 01:42:11

标签: php regex

我正在解析shell_exec,我得到了一系列结果字符串,我将与其他来源的数据进行比较。

输入shell文本包含ANSI彩色文本,我似乎无法解析。因此,我无法进行基本的字符串比较,更不用说我计划的in_array了。

我试图将preg_replace与许多PCRE类(print,cntrl等)以及strcmpstrtolower之类的简单事物一起使用,但都无济于事。< / p>

我确定我错过了一些愚蠢的东西,但我无法弄清楚我错过了哪些蠢事。

2 个答案:

答案 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。但是如果你需要快速和肮脏的东西,这可能会有效。