2012-06-13 26 views
2

我一直在爲這樣的半天掙扎,我似乎無法找到答案。請幫助一個noob。 :)PHP preg_split,表達我大括號和保存分隔符

我有一個字符串,它包含幾個花括號中的句子。它看起來是這樣的:{!真棒另一個文本}

{超級騙子額外的文本} {在這裏,我們再次去...}

現在我想分割它。

我想通了,我可以搜索喜歡的圖案} {等,所以我做了這樣的:

$key = preg_split('/[!?.]{1,3}\} \{/',$key); 

但這種方式我失去的分隔符,我失去了所有。 ! ?等等。

我試圖那樣做:

$key = preg_split('/([!?.]{1,3}\} \{)/',$key, -1, PREG_SPLIT_DELIM_CAPTURE); 
$sentences = array(); 

for ($i=0, $n=count($key)-1; $i<$n; $i+=2) { 
$sentences[] = $key[$i].$key[$i+1]."<br><br>"; 
} 

但這個代碼永遠不會加載,所以我收集的東西是不對的。但是什麼?

在此先感謝。

回答

4

您不需要拆分它,只需調用preg_match()就可以了。匹配的組將產生一個數組。 (),[^}]+內部的表達式匹配所有字符,但不包括下一個}。你想要的輸出值將在$matches[1]子陣列內。

$input = "{Super duper extra text.} {Awesome another text!} {And here we go again...}"; 
$matches = array(); 
preg_match_all('/\{([^}]+)\}/', $input, $matches); 
print_r($matches); 

Array 
(
    [0] => Array 
     (
      [0] => {Super duper extra text.} 
      [1] => {Awesome another text!} 
      [2] => {And here we go again...} 
     ) 

    [1] => Array 
     (
      [0] => Super duper extra text. 
      [1] => Awesome another text! 
      [2] => And here we go again... 
     ) 

) 
+0

謝謝,這一個比我想象的更好。 :) – moskalak

+0

這工作得很好,在我有一個字符串包含幾個JSON子串連接在一起的情況。例如:''{「id」:「Q3」,「name」:「問題3」} {「id」:「Q4」,「name」:「問題4」}''。唯一需要注意的是,如果其中一個子字符串中有一個關閉的大括號,則正則表達式將停止。 –

+0

@MikeFinch讓事情變得複雜。如果你的連接是串聯的,但總是與'{} {}'相鄰,你可以'preg_split('/ \} \ {/',$ str)'在'} {'連接處拆分字符串,但是你需要恢復關閉'}'或打開'''''preg_split()'將刪除。如果可能的話,試着讓你的數據源輸出一個適當的JSON對象數組,以'[{...},{...},{...}]開頭' –

2

我懷疑你需要preg_split()這一點。從你所描述的,它聽起來像:

$array = explode('} {', trim($string, '{}')); 

...將做的工作。

+0

讓我的答案在那裏,因爲它解釋了適當的正則表達式,但+1更簡單的解決方案。 –

0

* 試試這個工作.........中間大括號前使用正斜槓*

$關鍵字=使preg_split( 「/ [{}] /」,「{}超語言,編程「);

print_r($ keywords);

相關問題