2011-04-20 60 views
0

我需要一些幫助,我有一個字符串,它看起來像如下:使用正則表達式用1個下劃線替換所有正在進行的下劃線?

$p__________________________________________________________________________________________________________________________________________, &$s___________________________________________________________________________________________________________________________________________, &$k____________________________________________________________________________________________________________________________________________, &$nft_____________________________________________________________________________________________________________________________________________) 

,並想知道如果我可以使用正則表達式來把它變成:

$p_, &$s_, &$k_, &$nft_) 

這基本上是刪除所有(所以他們沒有特定的數量,但他們至少有1個)進行下劃線,並用1個下劃線替換它們。

我試過下面的模式,但沒有運氣:

preg_replace('#(\$[a-z]{1,3})[_]+#', '$1', $string); 

PS:原因一的preg_replace(正則表達式)是較受歡迎的(雖然我知道它不是100%總是正確的),因爲它更精確,然後使用一個常規字符串替換函數。

謝謝,感謝所有幫助。

+0

難道你真的想在正則表達式中這樣做?我認爲結合一些基本的PHP函數(explode(),while()或字符串操作函數)會更容易和更快。 – Mixxiphoid 2011-04-20 19:18:34

+2

很多人擔心正則表達式,所以很少有基準:)實際上,除非你這樣做了幾百萬時間一次,你不可能注意到使用正則表達式函數會對性能產生影響,一個'preg_replace()'比其他字符串操作符的組合更容易編寫和解釋。 – glomad 2011-04-20 19:39:07

回答

5
preg_replace('/_+/', '_', $string); 

想到這麼簡單的事情,你會從str_replace()獲得更好的性能更快。

+0

請注意,如果您知道每個下劃線序列的確切長度,那麼'str_replace'只會運行良好。 – Geert 2011-04-24 08:00:59

+1

我會調整正則表達式:'preg_replace('/ __ + /','_',$ string);'。這個小小的編輯將防止在單個下劃線上無用的替換。 – Geert 2011-04-24 08:03:33

0

您可以嘗試用'str_replace'替換_並留下空格,然後在右側修整它們!然後在字符串的末尾添加一個_。我不知道直接的方式對不起!海事組織這是比正則表達式

+1

使用非空格字符修剪作品 – Simon 2011-04-20 19:19:51

0

你在正確的軌道上,只是在變量後面忘了_

如果你需要一個錨 -

\ $字母主播:#(\$[a-z]{1,3}_)_+#$1

信主播:#([a-z]_)_+#$1

任何錨:#((?:^|[^_])_)_+#$1

相關問題