2017-05-19 59 views
0

我試圖的preg_replace號信,但數量「」但不超過7個字符的preg_replace正則表達式號信

只替代「數量」和不超過7個字符

文本代碼

"3"sca"""co"1"str"0"ctor""r"3"t"0"r"1""locat"5"o"133""0"27""754a49b393c2a0"33"b97"332"cb7"3"c3c07"2""co"1"str"0"ctor""r"3"t"0" 

數2 = d 數3 = E

試圖取代 「3」 至E, 「23」 至DE, 「33」 到EE, 「32」 至DE, 「333223」,以eeed德

「數字」,以信

我的preg_replace

$string = preg_replace("/\"322\"+/", "edd", $string); 
    $string = preg_replace("/\"233\"+/", "dee", $string); 
    $string = preg_replace("/\"32\"+/", "ed", $string); 
    $string = preg_replace("/\"23\"+/", "de", $string); 
    $string = preg_replace("/\"33\"+/", "e", $string); 
    $string = preg_replace("/\"333\"+/", "e", $string); 
    $string = preg_replace("/\"3\"+/", "e", $string); 
    $string = preg_replace("/\"3\"+/", "e", $string); 
    $string = preg_replace("/\"3\"+/", "e", $string); 
    $string = preg_replace("/\"3\"+/", "e", $string); 
    $string = preg_replace("/\"3\"+/", "e", $string); 

但過一段時間例如 「3333332」 或 「2222333」 及其動態變化 怎麼可能與一個了preg_replace

+0

爲什麼你想更換組合,例如322?你太過於複雜了。 –

+0

我試圖第三方web刮他們隱藏得字符串,如果我更換,我將得到完整的GET值 – Christian

+0

之前更換754a49b393c2a0「33」 B97「332」 CB7「3」 c3c07「2」 後更換 754a49b393c2a0eeb97eedcb7ec3c07d – Christian

回答

0

使用此正則表達式來既找不到2或1雙引號之間3〜7倍

(?<=\")[23]{1,7}(?=\")

「233223322」 將不會與 「deeddeedd」 替換,因爲它有超過7個字符(9)

Demo

說明

[23]{1,7}要麼23從由Precedeed 1至7倍

(?<=\")一個雙引號

(?=\")隨之而來的是雙引號

片段

$text = '"3"sca"""co"1"str"0"ctor""r"3"t"0"r"1""locat"5"o"133""0"27""754a49b393c2a0"33"b97"332"cb7"3"c3c07"2""co"1"str"0"ct"233223322"or""r"3"t"0"'; 

$regex = '/(?<=\")[23]{1,7}(?=\")/'; 

$text = preg_replace_callback($regex, 
    function ($m) { 
     switch ($m[0]) { 
      case '2': return 'd'; 
      case '3': return 'e'; 
      // Add other cases here ... 
     } 
    }, 
    $text 
); 

echo $text; 

Online demo

1

要更換隻需替換引號內的2和3,即可完成preg_replace_callback()

$before = '754a49b393c2a0"33"b97"332"cb7"3"c3c07"2"'; 

$after = preg_replace_callback(
     '/"([^"]+)"/', 
     function ($matches) { 
      return str_replace(array('2', '3'), array('d', 'e'), $matches[1]);; 
     }, 
     $before 
    ); 

echo $after; 
+0

只替換爲「數字」且不超過7個字符 – Christian

+0

@Christian編輯以更好地匹配你所這樣做。 –

+0

如何在這個替換函數中設置[2-9] {1,7}? – Christian