2017-01-02 26 views
0

如何使用preg_replace替換我的文本中的null單詞並以用戶名結尾的網址?preg_replace null與特定數據

例如:

更換null在此

(1, 3, 'sam', 'sam-website', 'yes', 'null'), (2, 3, 'alex', 'alex-website', 'yes', 'null'), (3, 3, 'kabor', 'kabor-website', 'yes', 'null'), 

得到這個

(1, 3, 'sam', 'sam-website', 'yes', 'http://mywebsite.com/pics.php?id=sam'), (2, 3, 'alex', 'alex-website', 'yes', 'http://mywebsite.com/pics.php?id=alex'), (3, 3, 'kabor', 'kabor-website', 'yes', 'http://mywebsite.com/pics.php?id=kabor'), 

試過,但它不工作

$name = preg_match('/3, \'(.*?)\',/im', $string, $matches); 

$url = preg_replace_callback('/null(?=)/', function ($name){ 
    return ($matches[1]); 
}, $string); 
+0

哪種格式*說*數據是?您應該在**到* null *格式之前操作數據**。 –

+0

其JSON格式 –

+0

請向我們展示獲取此* null *格式數據的代碼。就像我說的那樣,如果您事先操作和格式化數據,對您來說會更容易。 –

回答

0

你的正則表達式是一個位關閉。 im修飾符沒有做任何事情,並且您當前的捕獲機制不允許您將名稱和NULL值分開。另外return沒有做任何事情,$name只會是01$matches是捕獲的值)。

我會拉括號之間的所有值,然後使用CSV解析器來獲取每個數據點。從那裏你可以重建你的字符串並返回它。

下面是一個例子:

$string = "(1, 3, 'sam', 'sam-website', 'yes', 'null'), (2, 3, 'alex', 'alex-website', 'yes', 'null'), (3, 3, 'kabor', 'kabor-website', 'yes', 'null'),"; 
echo preg_replace_callback('/\(([^)]+)/', function ($match) { 
     $data = str_getcsv($match[1], ',', "'"); 
     $return = '('; 
     foreach($data as $key => $element) { 
      if(is_numeric($element)) { 
        $return .= $element; 
      } else { 
       if($key == (count($data) - 1)) { 
        $return .= "'http://mywebsite.com/pics.php?id=" . $data[2] . "'"; 
       } else { 
         $return .= "'" . $element . "'"; 
       } 
      } 
      $return .= ', '; 
     } 
     return rtrim($return, ', '); 
}, $string); 

演示:https://eval.in/707446

+0

非常感謝,完美工作! –