在PHP中用一个逗号删除多个逗号

ql3eal8s  于 2022-10-30  发布在  PHP
关注(0)|答案(2)|浏览(188)

想用一个逗号删除多个逗号[带或不带空格]。尝试了此正则表达式,但失败了preg_replace("/\s{1,5},\s{1,5}+/", ", ", $string);
已尝试其他解决方案,但找不到任何解决方案,其中空格也与逗号一起存在。

样品输入

GUWAHATI, TEZPUR, , BAMUNI HILLS, MAHABHAIRAB TEMPLE, AGNIGARH ,   
GUWAHATI, TEZPUR ,   , BAMUNI HILLS,, MAHABHAIRAB TEMPLE, AGNIGARH,  
GUWAHATI, , TEZPUR, , BAMUNI HILLS, MAHABHAIRAB TEMPLE, AGNIGARH

预期输出

GUWAHATI, TEZPUR, BAMUNI HILLS, MAHABHAIRAB TEMPLE, AGNIGARH
tktrz96b

tktrz96b1#

您可以使用此解决方案:

$s = preg_replace('/^[,\h]+|\h*(,)(?:\h*,)+\h*|[,\h]+$/m', '$1 ', $s);

RegEx Demo

明细:

  • ^[,\h]+:匹配开始后1个以上的逗号或空格
  • |:或
  • \h*(,)(?:\h*,)+\h*:匹配2个或多个逗号 (可选),以空格分隔。请注意,我们匹配捕获组中的单个逗号
  • |:或
  • [,\h]+$:匹配结尾前1个以上的逗号或空格
  • '$1 ':是替换以放置捕获的逗号值,后跟一个空格
dldeef67

dldeef672#

您可以使用trim($string, ', \n\r\t\v\x00')从空白和逗号中trim$string(字符是default trim chars +逗号),然后使用preg_replace('/\s*(?:,\s*)+/', ', ', ...)

<?php

$string = ", , GUWAHATI, TEZPUR, , BAMUNI HILLS, MAHABHAIRAB TEMPLE, AGNIGARH ,   ";
echo preg_replace('/\s*(?:,\s*)+/', ', ', trim($string, ", \n\r\t\v\x00"));
// => GUWAHATI, TEZPUR, BAMUNI HILLS, MAHABHAIRAB TEMPLE, AGNIGARH

请参阅PHP demo
\s*(?:,\s*)+模式匹配零个或多个空格,后跟一个或多个逗号序列和零个或多个空格。

相关问题