我想清理以逗號分隔的標簽串列以洗掉空標簽和多余的空格。我想出了
$str='first , second ,, third, ,fourth suffix';
echo preg_replace('#[,]{2,}#',',',preg_replace('#\s*, \s*#',',',preg_replace('#\s #s',' ',$str)));
到目前為止效果很好,但是可以一次更換嗎?
uj5u.com熱心網友回復:
您可以使用:
[\h*([,\h])[,\h]*
查看在線演示。或者:
\h*([,\h])(?1)*
查看在線演示
\h*- 0 (貪婪)水平空白字符;([,\h])- 匹配逗號或水平空格的第一個捕獲組;[,\h]*-選項 1:0 (貪婪)逗號或水平空白字符;(?1)*-選項 2:遞回第一個子模式 0 (貪婪)次。
替換為第一個捕獲組:
$str='first , second ,, third, ,fourth suffix';
echo preg_replace('~\h*([,\h])[,\h]*~', '$1', $str);
echo preg_replace('~\h*([,\h])(?1)*~', '$1', $str);
兩者都列印:
first,second,third,fourth suffix
uj5u.com熱心網友回復:
您可以使用
preg_replace('~\s*(?:(,)\s*) |(\s) ~', '$1$2', $str)
將兩個備選方案合并為一個結果
preg_replace('~\s*(?:([,\s])\s*) ~', '$1', $str)
請參閱正則運算式演示和PHP 演示。詳情:
\s*(?:(,)\s*)- 零個或多個空格,然后出現一個或多個逗號(捕獲到組 1 ($1)),然后是零個或多個空格|- 或者(\s)- 一個或多個空格,同時將最后一個空格捕獲到第 2 組 ($2)。
在第二個正則運算式中,([,\s])捕獲單個逗號或空格字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/410301.html
標籤:
上一篇:如何通過分隔符拆分行?
