我認爲一個正則表達式可能會做到這一點,但我還沒有能夠想出一個有效的方法。我有一些相當長的PHP字符串,我需要清理。在某些情況下,出現
而不是單個空格字符,而在其他情況下
(等)出現。我想用一個空格來替換所有的單個
,但是保留其他地方,以保持意圖。如何用一個空格替換單個 's,但是,如果有多個 s,該怎麼辦?
有什麼想法?我認爲可以在這裏使用正則表達式,但我一直在努力爭取一段時間!
我認爲一個正則表達式可能會做到這一點,但我還沒有能夠想出一個有效的方法。我有一些相當長的PHP字符串,我需要清理。在某些情況下,出現
而不是單個空格字符,而在其他情況下
(等)出現。我想用一個空格來替換所有的單個
,但是保留其他地方,以保持意圖。如何用一個空格替換單個 's,但是,如果有多個 s,該怎麼辦?
有什麼想法?我認爲可以在這裏使用正則表達式,但我一直在努力爭取一段時間!
您必須使用否定的後視和負視向,以確保您沒有其他
左右。
$str = preg_replace('~(?<! ) (?! )~i', ' ', $str);
更多關於環視的信息here。
負面看看效果很好,我只需要在導入文本時運行一次,所以我並不擔心性能。 – Programming123
使用明確的正則表達式匹配(not- ) (not- )
並添加替換爲$1 $2
(匹配1空格匹配2)。您可能必須明確將not-
編碼爲([^;]|[^p];|[^s]p;|[^b]sp;|[^n]bsp;|[^&]nbsp;)
。
編輯:雖然[negative] lookarounds可能有用(當然也可能更少的代碼),但您可能需要測量每種方法的速度。我發現正則表達式中的某些機制可能比其他機制慢得多,儘管我不能直接說出查找速度。如果速度成爲問題,您可以跳過正則表達式,並使用strpos
和substring
操作和測試的組合,即使它們創建起來更麻煩,它們通常比正則表達式要快得多。我建議這只是因爲你有一個非常明確的字符串,你正在尋找;用較少的確定字符串,正則表達式肯定是要走的路。
對於此實例(使用僞代碼),您的字符串strpos
搜索將是一個簡單的strpos($mystring, " ")
,一旦找到匹配項,請致電strpos($mystring, " ")
。如果兩個index
調用返回相同的值,則可以跳過此替換並在索引點之後搜索字符串(在indexDoubleFound + 12
之後開始您的單一
搜索,但在indexDoubleFound + 6
之後開始您的雙
搜索以確保您不會錯過任何並且你不會無意中更換)。
更新我的答案,在PHP中使用正確的函數名稱('strpos'而不是'index')。 – abiessu
而你想要更換一個空間+ ? –
Swishhhhh-HoHe-Swishhhhh-這裏有人嗎?你在你的代碼編輯器中做這個嗎?在這種情況下,你的編輯器是什麼? –
另一種想法 - 使用'preg_replace_callback('#( )+#')',回調函數檢查它是否匹配一個' '或多個並且相應地返回替換字符串。 – DCoder