Biçimine preg_replace kullanma

1 Cevap php

Desen ve değiştirme ile sorun yaşıyorsunuz. Nasıl değiştirilmesi gibi bir son ürün yankı yapabilir

INSERT INTO `table` (`person`, `file`) VALUES
('test','test'),
('test2','test2'),
('test3','test3');

test3:test3 veya ne olursa olsun metin SQL kapatmak olabilir ben SQL içine dize eklemek çalışıyorum ama ben bunu yapmak için aşağıdaki geçerli dize biçimlendirmek gerekiyor ve ben dizenin son bölümünü olması gerekir model ('test3','test3');

<?php
$string = 'test:test test2:test2 test3:test3';
$pattern = '';
$replacement = '';
echo preg_replace($pattern, $replacement, $string);
?>

Ayrıca, aynı zamanda bu gibi bir dize olabilir? 'test@test.com:test test2:test2' e-posta TÜM zamanlarda kolon önce olacak oysa.

1 Cevap

Böyle bir şey deneyin:

$string = 'test:test test2:test2 test3:test3';
$patterns = array("/([^\s:]+):([^\s:]+)/", "/\s++\(/");
$replacements = array("('$1', '$2')", ", (");
$sql = 'INSERT INTO `table` (`person`, `file`) VALUES ' . preg_replace($patterns, $replacements, $string) . ';';
echo $sql . "\n";

Bir açıklama:

Regex 1
  ([^\s:]+)   # match one or more chars other than white space chars and colons and store it in group 1
  :           # match a colon 
  ([^\s:]+)   # match one or more chars other than white space chars and colons and store it in group 2 
Replacement 1
  (           # insert a '('
  '$1'        # insert what is matched in group 1 and surround it with single quotes
  ,           # insert ', '
  '$2'        # insert what is matched in group 2 and surround it with single quotes
  )           # insert a ')'

Regex 2
  \s++        # match one or more white space chars
  \(          # match a '('
Replacement 2
  , (         # insert ', ('