2017-05-19 4 views
0

ich versuche Nummer Brief an preg_replace aber im Feld „“ und nicht mehr als 7 Zeichenpreg_replace regex Nummer Brief

ersetzen nur in „Nummer“ und nicht mehr als 7 Zeichen

Textcode

"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" 

Nummer 2 = d Nummer 3 = e

versuchen, "3", um e zu ersetzen "23" de, "33" ee "32" de "333.223" to ja

de

"Zahlen" auf Brief

mein 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); 

aber einige Zeit Beispiel "3333332" oder "2222333" seine dynamische Veränderung wie mit einem preg_replace möglicher ersetzen

+0

Warum versuchen Sie Kombinationen zu ersetzen, z.B. 322? Du verkomplizierst das. –

+0

i zu 3rd-Party-Web versuchen sie Zeichenfolge in dem bekommen Schaben verstecken, wenn ich, dass ich voll get Wert erhalte ersetzen – Christian

+0

vor 754a49b393c2a0 "33" b97 "332" CB7 "3" c3c07 "2" nach 754a49b393c2a0eeb97eedcb7ec3c07d – Christian

Antwort

0

verwenden regex zu finden entweder 2 oder 3 zwischen doppelten Anführungszeichen von 1 bis 7 mal

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

"233223322" wird nicht mit "deeddeedd" ersetzt werden, da sie hat mehr als 7 Zeichen (9)

Demo

Erläuterung

[23]{1,7} Entweder 2 oder 3 1 bis 7 mal

(?<=\") Precedeed durch ein doppeltes Anführungszeichen

(?=\") Gefolgt von einem doppelten Anführungszeichen

Schnipsel

$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

zu Ersetzen Sie nur diese 2s und 3s in Anführungszeichen, Sie können eine preg_replace_callback() tun, um dies zu erreichen.

$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

ersetzen Sie nur in "Nummer" und nicht mehr als 7 Zeichen – Christian

+0

@Christian Edited, um besser zu entsprechen, was Sie sind tun. –

+0

Wie wird [2-9] {1,7} in dieser Ersetzungsfunktion eingestellt? – Christian