2013-08-22 121 views
0

我用PHP正則表達式奮力子串在主串匹配,但也有一些條件正則表達式匹配十六進制字符串

子字符串應:

  1. 字符串應該有7個連續字節最多在它(3個空字節) '000000',而不是在它的單個??

像例如:

  1. 輸入字符串:4455330000002211223311223377885233
    匹配度:22112233112233

  2. 輸入字符串:441553300000022
    匹配度:無(因爲它有在它3個空字節)

  3. 輸入字符串:112233000000005511220011
    匹配度:無(因爲它有3個空字節)

  4. 輸入字符串:11??0000002255
    匹配度:無(因爲它有在它在它具有?? 3個空字節和)

  5. 輸入字符串:426F6D650000010001020000
    匹配度:426F6D650000010001020(因爲它有在它至多3個空字節和7個連續的非空字節

  6. 輸入字符串:426F6D650000010001000000
    匹配度:無(因爲不是具有7個連續的非空字節)

什麼是正確匹配這些正則表達式的好東西?

+0

我建議您從Ultrapico下載並使用Expresso。它允許您設計和測試正則表達式。自從向我提出建議後,生活變得更加輕鬆。 :) – enhzflep

+0

@enhzflep感謝工具建議,我會盡力。 – Shashi

+0

子字符串是否可以以空字節開頭? –

回答

0

你可以用這個正則表達式的嘗試:

preg_match("/^[a-f0-9]{1,}$/is",$str) 
+0

抱歉沒有成功! – Shashi

0

不是說這是最好的解決辦法,但這樣的事情也可以不用正則表達式完成,只是在情況下,它可以幫助你:

$str = explode ('??', $string); 
if (count ($str) > 1) // It includes at least one '??' 

$str = explode ('00', $string); 
if (count ($str) > 4) // It includes more than 3 times the '00' pattern 

foreach ($str as $sub_string) { 
    if (count ($sub_string > 13)) // One of the sub_string between the '00' patterns contains 7 bytes as wanted 
} 

如果你以後要回到你的代碼,它會變得更容易維護。

+0

說真的,我已經想到了,但它變得複雜,以保持邏輯,以便我走向正則表達式,但我確信我會試試這個謝謝 – Shashi

相關問題