2015-06-06 32 views
0

在字符串內,我想在下面的例子中刪除的字符串的一部分像(具有正則表達式和的preg_replace):刪除的字符串與正則表達式

abcd,{{any_word |same_word_but_to_keep}},efg... 

結果應該是:

​​

有什麼想法?


又如:

Bellevue,Bergouey |Bergouey(tokeep),Bourdious 

結果應該是:

Bellevue,Bergouey,Bourdious 

非常感謝!!

+0

什麼語言?你想這 –

+1

直到它被明確什麼是字的圖案或什麼都被刪除是我們應該怎麼回答的話。 –

+0

感謝您的回答,我更新了這個問題,也許這更清楚,任何想法如何構建該正則表達式? – Julien

回答

2

您可以使用下面的正則表達式:

$str = 'Bellevue,Bergouey |Bergouey,Bourdious'; 
$str = preg_replace('~(\w+)\s*\|(\1)~', '$2', $str); 
echo $str; //=> "Bellevue,Bergouey,Bourdious" 
1

嘗試:

preg_match_all("/\|(.*?) /", $your_string, $matches); 
foreach ($matches[1] as $match) { 
    $your_string = preg_replace("/([^\|]|^)$match/", "", $your_string); 
} 
$your_string = preg_replace("/\|/", "", $your_string); 

它是如何工作

  • preg_match_all("/\|(.*?) /", $your_string, $matches)獲取以下|
  • preg_replace("/([^\|]|^)$match/", "", $your_string)的所有字刪除未|之前比賽的所有事件,佔如果匹配的字在的字符串開頭
  • preg_replace("/\|/", "", $your_string)刪除的|所有出現從字符串
+0

謝謝OhAuth,但話不僅用空格分隔(可也昏迷),我更新的問題,以重複結構之間總是{{..}},也許可以把它eaisier,它可能STHG愚蠢的,任何想法? – Julien

1

我會怎麼做:

preg_replace('/(\w+),(\w+)\s*\|\2,(.+)/', "$1,$2,$3", $string); 

說明:

(\w+) : group 1, a word 
    ,  : a comma 
    (\w+) : group 2, a word 
    \s* : white spaces, optional 
    \| : a pipe character 
    \2 : back reference to group 2 
    ,  : a comma 
    (.+) : rest of the string 
0

最後,我發現沒有一個正則表達式的解決方案,它完美的作品:

$mystring="Arance,la Campagne,Gouze |Gouze,Lendresse"; 
$tmp=""; 
$words=explode(",",$mystring); 
foreach($words as $word){ 
    if(strpos($word,"|")){ 
      $l=explode("|",$word); 
      $tmp=$tmp.$l[1].","; 
    }else{$tmp=$tmp.$word.",";} 
} 
$mystring=$tmp; 
相關問題