删除两个特定字符之间的逗号

时间:2010-06-25 13:03:10

标签: php regex string

我目前有字符串:

"Blah, blah, blah,~Part One, Part Two~,blah blah"

我需要删除~字符之间的逗号,以便读取。

"Blah, blah, blah,~Part One Part Two~,blah blah"

有人可以帮帮我吗?

非常感谢,

3 个答案:

答案 0 :(得分:6)

如果~和偶数~之间只有一个逗号,那么

preg_replace("/~([^,]*),([^,]*)~/", "~\1\2~", $text) 

应该这样做。

答案 1 :(得分:1)

通过以下几个步骤完成此操作可能更容易:

  • 拆分~
  • 仅转换~内部的部分
    • 只需将','替换为''
    • 即可
  • ~
  • 一起加入这些部分

正则表达式解决方案

也就是说, 可以在正则表达式中执行此操作,假设偶数~

<?php

echo preg_replace(
   '/(^[^~]*~)|([^~]*$)|([^,~]*),|([^,~]*~[^~]*~)/',
   '$1$2$3$4',
   'a,b,c,~d,e,f~,g,h,i,~j,k,l,~m,n,o~,q,r,~s,t,u'
);

?>

以上打印(as seen on codepad.org):

a,b,c,~def~,g,h,i,~jkl~m,n,o~qr~s,t,u

如何运作

有4个案例:

  • 我们在字符串的开头,“在外面”
    • 只需匹配,直到我们找到第一个~,所以下次我们会“在里面”
    • 所以,(^[^~]*~)
  • 在字符串结尾之前不再有~
    • 如果偶数~,我们就会“在外面”
    • 只是匹配到最后
    • 所以,([^~]*$)
  • 如果不是上述内容,我们就是“内部”
    • 继续~之前找到下一个逗号(所以我们仍在“内部”)
      • 所以,([^,~]*),
    • 如果我们找到~而不是逗号,那就出去吧,然后再回到下一个~
      • 所以,([^,~]*~[^~]*~)

在所有情况下,我们确保捕获足以重建字符串。

参考

答案 2 :(得分:0)

$string = "Blah, blah, blah,~Part One, Part Two~,blah blah";
$pos1 = strpos($string, "~");

$substring = substr($string, $strpos, strlen($string));
$pos2 = strpos($string, "~");

$final = substr($substring, $pos1, $pos2);
$replaced = str_replace(",", "", $final);

$newString = str_replace($final, $replaced, $string);
echo $newString;

它完成了这项工作,但我在这里写了它并且可能有问题(至少是性能问题)。