2015-05-07 63 views
2

這裏是我的文字來源:添加撇號正則表達式匹配

  $data['DATA_TYPE'] = 'enum('Film Studio','Website','Advertiser','Distributer')'; 

這裏是我的代碼:

  $data = static::getColumnInfo($resourceClassName, $columnName); 
      $data = $data['DATA_TYPE']; 
      preg_match('/enum\((.*)\)$/',$data,$matches); 
      $vals = explode(',',$matches[1]); 

這裏是結果:

  0 => string ''Film Studio'' (length=13) 
      1 => string ''Website'' (length=9) 
      2 => string ''Advertiser'' (length=12) 
      3 => string ''Distributer'' (length=13) 

正如你所看到的,結果包含在每個索引中的開始和結束的報價。

我需要修改正則表達式按其當前操作加上開始和結束引號,所以我可以在內部維護引號,但匹配預期的外部引號。

+0

你是如何產生的 「結局」?我相信額外的引號是你的輸出(var_dump()?)。字符串的長度只包含字符串和你從正則表達式中得到的單引號。你可以用修剪($ input,「'」)修剪這些引號。 – fbas

+0

@anubhava string'enum('Film Studio','Website','Advertiser','Distributer')'(length = 56) – jkushner

+0

@fbas結果來自爆炸, – jkushner

回答

1

您可以使用:

$vals = explode(',', preg_replace("/^'|'$|'(?=,)|(?<=,)'/", "", $matches[1])); 

即從$matches[1]字符串中刪除單引號,然後爆炸使用逗號。

將得到:

print_r ($vals); 
Array 
(
    [0] => Film Studio 
    [1] => Website 
    [2] => Advertiser 
    [3] => Distributer 
) 

說明:

/^'|'$|'(?=,)|(?<=,)'/ # regex used for removing single quote 
^'      # quote found at start 
'$      # quote found at end 
'(?=,)     # lookahead, quote followed by a comma 
(?<=,)'     # lookbehind, quote preceded by a comma 
+0

不幸的是,將刪除字符串內的單引號。我只需要特別從開始和結束的報價。 – jkushner

+0

trim($ data,「'」); – fbas

+0

@fbas也不行。那將只刪除第一個報價和最後一個報價,留下實體。我需要正則表達式來引用組合 – jkushner