PHP从字符串中删除终端代码

时间:2016-11-21 23:23:07

标签: php regex string

在处理使用proc_open创建的流程的输入/输出时,我已经使用特殊终端ANSI代码(\033[0J\033[13G)进行了处理,但不是找到这些特定代码正在做什么的参考,他们真的搞乱了我的preg_match电话。

PHP是否有内置方法来清理这些类型的字符串?或者与preg_replace一起使用的正确表达式是什么?请注意,我正在处理非ascii字符,所以剥除除...之外的所有内容都不起作用。

1 个答案:

答案 0 :(得分:1)

通常ANSI代码由ESC(\033又名\x1b)引入,是一个空方括号,然后是数字(可能重复:*[32;40m)并以字母结尾。

你可以使用#\\x1b[[][0-9]+(;[0-9]*)[A-Za-z]#之类的内容来preg_replace将它们全部遗忘。

这有效(刚刚测试过),即使绝对有点过分:

$test = preg_replace('#\\x1b[[][^A-Za-z]*[A-Za-z]#', '', $test);

我还found this on GitHubthis on SO