2010-11-17 59 views
-3

我正在尋找替換所有出現的空行字符跟隨新行(或在開始時發生的輸入字符串)。我知道我可以使用preg_replace_callback()和使用str_repeat和strlen的回調來實現這一點,或者類似地使用/ e開關;但想知道是否可以做得更簡單。PHP中的preg_replace() - 替換出現n次出現的字符時出現n次出現的另一個字符時,跟隨一個新行

目前,我有以下幾點:

$testData = " Hello\n to everybody\n in the world"; 
echo preg_replace('/^|\n()+/', ' ', $pValue); 

這給:

"  Hello to everybody in the world" 

我真的什麼後:

"  Hello\n to everybody\n   in the world" 

回答

1

在提問之前,我應該更加努力地搜索:找到似乎完美工作的答案(對於java解決方案)。爲了其他有同樣問題的人,我會在這裏留下解決方案。

$testData = " Hello\n to everybody\n in the world"; 
echo preg_replace('/(?m)(?:^|\\G) /', ' ', $pValue); 

現在只需要確定是否舊版本的PHP支持這一點。

+0

年齡多大? 'preg_ *'函數一直由PCRE庫提供支持,根據其更新日誌,PCRE自2003年2月4.0版以來支持'\ G'。 ref:http://www.pcre.org/changelog.txt – 2010-11-18 03:25:28

+0

@Alan - 我完全不熟悉\ G運算符,並且知道PHP已經引入了許多新的regexp元素/開關隨着時間的推移。這是爲了提高性能,在一個開源庫中:我主要關注5.2.0(我通常不會提供對此的支持),但知道庫的某些用戶正在使用PHP的版本早在5.1.6 – 2010-11-18 09:31:16

0

您可以使用遞歸

$pValue = " Hello\n to everybody\n in the world"; 
echo myReplace($pValue); 

function myReplace($value) 
{ 
    $value = preg_replace('/(^|\\n)(( )*) /', '\1\2 ', $value); 
    if (preg_match('/(^|\\n)(( )*) /', $value)) 
    { 
     $value = myReplace($value); 
    } 
    return $value; 
} 
相關問題