PHP从字符串中删除终端代码
在处理用PHP从字符串中删除终端代码,php,regex,string,Php,Regex,String,在处理用proc\u open创建的进程的输入/输出时,我遇到了特殊的终端ANSI代码(\033[0J,\033[13G),除了找不到这些特定代码正在执行的操作的引用之外,它们还干扰了我的preg\u match调用 PHP是否有一个内置的方法来清理这些类型的字符串?或者使用什么正确的表达式来处理preg\u replace?请注意,我处理的是非ascii字符,所以除去…之外的所有字符都不起作用。通常ANSI代码是由ESC引入的(\033aka\x1b),一个开放的方括号,然后是数字(可能重复:
proc\u open
创建的进程的输入/输出时,我遇到了特殊的终端ANSI代码(\033[0J
,\033[13G
),除了找不到这些特定代码正在执行的操作的引用之外,它们还干扰了我的preg\u match
调用
PHP是否有一个内置的方法来清理这些类型的字符串?或者使用什么正确的表达式来处理
preg\u replace
?请注意,我处理的是非ascii字符,所以除去…之外的所有字符都不起作用。通常ANSI代码是由ESC引入的(\033
aka\x1b
),一个开放的方括号,然后是数字(可能重复:*[32;40m
),并以字母结尾
您可以使用类似于#\\x1b[[][0-9]+(;[0-9]*)[A-Za-z]#
的东西来preg\u replace
将它们全部删除
这是有效的(刚刚测试过),即使肯定是过度使用:
$test = preg_replace('#\\x1b[[][^A-Za-z]*[A-Za-z]#', '', $test);
我也有,而且。通常ANSI代码是由ESC(
\033
又名\x1b
)引入的,一个开放的方括号,然后是数字(可能重复:*[32;40m
)并以字母结尾
您可以使用类似于#\\x1b[[][0-9]+(;[0-9]*)[A-Za-z]#
的东西来preg\u replace
将它们全部删除
这是有效的(刚刚测试过),即使肯定是过度使用:
$test = preg_replace('#\\x1b[[][^A-Za-z]*[A-Za-z]#', '', $test);
我还有,和。您要先选择一个字符集。您正在读取原始字节。这很复杂。@self,如果按字符集您指的是编码,我总是处理utf8字符串。您要先选择一个字符集。您正在读取原始字节。这很复杂。@self,如果按字符集您指的是编码,我总是处理utf8字符串字符串。我无法获取要匹配的转义字符,我尝试将其更改为[\u001b],但出现错误“编译失败:PCRE不支持偏移量2处的\L、\L、\N{name}、\U或\U”.
\u
是Javascript。在PHP中,您需要\x1b
,并且由于单引号仍将转义\,因此您需要\\x1b
。请参阅更新的答案。我无法使转义字符匹配,我尝试将其更改为[\u001b],但出现错误“编译失败:PCRE不支持\L、\L、\N{name}、\u或偏移量2处的\u”.\u
是Javascript。在PHP中,您需要\x1b
,并且由于单引号仍将转义\,因此您需要\\x1b
。请参阅更新的答案。