2017-08-11 142 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

這就是我一直在尋找的東西。我改變了一點,現在它符合我的目的。謝謝。 :) –