2017-08-11 144 views
0

我喜欢这个 -正则表达式查找ASCII字符

“CRT \ X00 \ X00 \ X00 \ X00 \ x00G3 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X80 \ X10A \ X06 \字符串x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x13“

我必须将ASCII字符(CRT,G3,a, E)到十六进制和其他字符\ x00到\ x09将分别替换为0到9,上面的\ x10分别显示为10和以上。

所以我试图做的是写一个正则表达式找到一个字符不匹配的模式/\x../g和转换这些字符为十六进制和十六进制取代ASCII,然后我可以使用另一个regEx处理\ x ..模式。

我写该模式是/[^ \ X \ d \ d] | [^ \ X \ W \ d] | [^ \ X \ d \ W] /克

这里是我的正则表达式模式和regex101.com- MyRegEx

如果你看到的东西串正在为一个比预料的问题等。问题 - G(G3)之后我没有得到3匹配。

可以在这个人的帮助。提前致谢。

+0

试试['\\ X {2}(* SKIP)(* F)| .'(https://regex101.com/r/fyecD6/1)如果您是在PHP工作。或['\\ X {2}(* SKIP)(* F)|(?!。(\\ X {2}))+'](https://regex101.com/r/fyecD6/2)。 –

+0

您的正则表达式不正确地使用字符类。一个字符类是一组括括号的字符(或其他类)。你正在使用字符串 - '\ x' - 以不正确的方式。 [见本例](https://regex101.com/r/57Phg8/1)并查看右边的说明。 – ClasG

回答

1

您可以使用类似

(?!\\x\d\d)(.)|..(..) 

这捕获单个ASCII字符到第1组和HEX序列INT O组2

如果第1组不为空,它应该被转换成一个两位数的HEX码并插入。否则,应插入第二组()。

See an attempt to illustrate it here at regex101

+0

这就是我一直在寻找的东西。我改变了一点,现在它符合我的目的。谢谢。 :) –