使用正则表达式删除字符串中的字符串

时间:2015-06-06 10:06:12

标签: php regex preg-replace

我想删除字符串的一部分,如下例所示(使用正则表达式和preg_replace):

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

结果应该是:

abcd,{{same_word_but_to_keep}},efg...

有什么想法吗?

另一个例子:

Bellevue,Bergouey |Bergouey(tokeep),Bourdious

结果应该是:

Bellevue,Bergouey,Bourdious

非常感谢!!

4 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式:

ldconfig

答案 1 :(得分: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)从字符串
  • 中删除所有|的出现

答案 2 :(得分: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

答案 3 :(得分: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;