我有一個這樣的字符串:使用正則表達式來添加空格
text..moretext,moartxt..,asd,,gerr..,gf,erg;ds
這基本上是可變數量的文本,其次是可變數量的標點,然後是文本的進一步可變數量等等。
如何使用正則表達式在PHP中將上述字符串轉換爲此值?
text. .moretext, moartxt. . ,asd, ,gerr. . ,gf, erg; ds
每個字可僅具有在其任一側的標點符號1個字符。
我有一個這樣的字符串:使用正則表達式來添加空格
text..moretext,moartxt..,asd,,gerr..,gf,erg;ds
這基本上是可變數量的文本,其次是可變數量的標點,然後是文本的進一步可變數量等等。
如何使用正則表達式在PHP中將上述字符串轉換爲此值?
text. .moretext, moartxt. . ,asd, ,gerr. . ,gf, erg; ds
每個字可僅具有在其任一側的標點符號1個字符。
我會做這種分兩次,第一次每個單詞後的標點符號。然後在這個詞前標點符號。
<?php
$sourcestring="text..moretext,moartxt..,asd,,gerr..,gf,erg;ds";
echo preg_replace('/(\w[.,;])([^\s])/i','\1 \2',$sourcestring);
?>
$sourcestring after replacement:
text. .moretext, moartxt. .,asd, ,gerr. .,gf, erg; ds
<?php
$sourcestring="text. .moretext, moartxt. .,asd, ,gerr. .,gf, erg; ds";
echo preg_replace('/([^\s])([.,;]\w)/i','\1 \2',$sourcestring);
?>
$sourcestring after replacement:
text. .moretext, moartxt. . ,asd, ,gerr. . ,gf, erg; ds
非常感謝!工作正常。 – CHRIS
讓我們來解決這個與preg_replace_callback:
代碼
$string = 'text..moretext,moartxt..,asd,,gerr..,gf,erg;ds';
$chars = '\.,;'; // You need to escape some characters
$new_string = preg_replace_callback('#['.$chars.']+#i', function($m){
return strlen($m[0]) == 1 ? $m[0].' ':implode(' ', str_split($m[0]));
}, $string); // This requires PHP 5.3+
echo $new_string; // text. .moretext, moartxt. . ,asd, ,gerr. . ,gf, erg; ds
當您在連續標點符號的最後一個字符和下一個字母之間放置空格時,是否有規則?在你的例子中,有時你會放置一個空格(例如'moretext,moartxt'),有時你不會(例如'。,asd,')。如果你是一致的,或者沒有關係,那麼答案很簡單。 – lurker
優先考慮最早的單詞,但如果該單詞已在該單詞的末尾有一個字母,則將其指定給下一個單詞。我希望這很清楚,但不應該太重要。 – CHRIS
這是哪種語言/編輯/環境? – FrankieTheKneeMan