簡體   English   中英

通過正則表達式清理逗號分隔的列表

[英]Clean up a comma-separated list by regex

我想清理以逗號分隔的標簽列表以刪除空標簽和多余的空格。 我想出了

$str='first , second ,, third, ,fourth   suffix';
echo preg_replace('#[,]{2,}#',',',preg_replace('#\s*,+\s*#',',',preg_replace('#\s+#s',' ',$str)));

到目前為止效果很好,但是可以一次更換嗎?

您可以使用

preg_replace('~\s*(?:(,)\s*)+|(\s)+~', '$1$2', $str)

將兩個備選方案合並為一個結果

preg_replace('~\s*(?:([,\s])\s*)+~', '$1', $str)

請參閱正則表達式演示PHP 演示 詳情

  • \s*(?:(,)\s*)+ - 零個或多個空格,然后出現一個或多個逗號(捕獲到第 1 組( $1 )中),然后是零個或多個空格
  • | - 或者
  • (\s)+ - 一個或多個空格,同時將最后一個空格捕獲到第 2 組( $2 )。

在第二個正則表達式中, ([,\s])捕獲單個逗號或空格字符。

您可以使用:

\h*([,\h])(?1)*

查看在線演示


  • \h* - 0+(貪婪)水平空白字符;
  • ([,\h]) - 匹配逗號或水平空白的第一個捕獲組;
  • (?1)* - 遞歸第一個子模式 0+(貪婪)次。

替換為第一個捕獲組:

$str='first , second ,, third, ,fourth   suffix';
echo preg_replace('~\h*([,\h])(?1)*~', '$1', $str);

印刷:

first,second,third,fourth suffix

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM