2012-03-06 48 views
1

到目前爲止,我一直在使用我的程序regcomp在常規字符串上使用正則表達式。Regcomp用於匹配非ASCII流中的模式的替代

現在,我需要在非ASCII二進制流中找到特定的字節模式:我的理解是regcomp在這種情況下無法工作。

實際上,我想的東西,讓我定義 - 假設 - 3字節模式,可能使用16進制:

\x27\x87\xFE 

感謝

回答

2

如果你需要一個正則表達式庫,適用於UTF-8,你應該使用Phillip Hazel’s excellent PCRE library

+0

其實我正在網絡二進制協議。 – ziu 2012-03-06 23:11:30

+0

@ziu我不知道常規regcomp(3)然後不允許使用8位代碼。他們真的嗎?我從來沒有聽說過這樣的限制。這是一個POSIX函數(IEEE Std 1003.2),所以應該使用8位語言環境。究竟是什麼問題?符號? – tchrist 2012-03-06 23:14:36

+0

我的問題是,我試圖讓regcomp使用不可打印的字節 - 即ASCII範圍之外的任意字節值 - 但我無法使它符合我的模式。 – ziu 2012-03-06 23:26:58

0

我在短髮現了什麼:

  • regexp.h不解釋輸入字符串。這意味着: 你可以很容易地傳遞任意字節到regcomp像這樣

    char buffer [10] =「\ x01abcd \ x03」;

    但是,當涉及到傳遞上面用ASCII編碼的相同字符串時,regexp.h不會將其解釋爲C編譯器所做的。

  • 當解析網絡資料時,PCRE會更好地工作。謝謝tchrist