在处理使用proc_open
创建的流程的输入/输出时,我已经使用特殊终端ANSI代码(\033[0J
,\033[13G
)进行了处理,但不是找到这些特定代码正在做什么的参考,他们真的搞乱了我的preg_match
电话。
PHP是否有内置方法来清理这些类型的字符串?或者与preg_replace
一起使用的正确表达式是什么?请注意,我正在处理非ascii字符,所以剥除除...之外的所有内容都不起作用。
答案 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);