2012-09-25 96 views
1

我有以下字符串preg_replace函數只替換(括號)之間

someText 50-90% someText 

我只想50如果字符串在格式這樣

someText 50%-90% someText 

我後添加%我試過以下...

preg_replace('/(\d+)\-[\d]+%/','$0%', 'text 30-50% text') 
//the output: text 30-50%% text 
preg_match_all('/(\d+)\-[\d]+%/', 'text 30-50% text',$x) 
/*$x = array(2) { 
* [0]=> 
* array(1) { 
* [0]=> 
* string(6) "30-50%" 
* } 
* [1]=> 
* array(1) { 
* [0]=> 
* string(2) "30" 
* } 
*} 
*/ 
preg_replace('/(\d+)\-[\d]+%/','$1%', 'text 30-50% text'); 
//the output: text 30% text 
+0

當前輸出是'文本30-50 %%文本',但我希望它成爲'文本30%-50%文本.... ....每個數字後的'%'。 – Hilmi

回答

3
<?php 
function normalizeRange($range) { 
    return preg_replace('~(\d+)(-\d+%)~','$1%$2', $range); 
} 

var_dump(normalizeRange("5-6%")); // 5%-6% 
var_dump(normalizeRange("5%-6%")); // 5%-6% 
3

用途:

$str = "someText 50-90% someText"; 

$ret = preg_replace('/\d+(?=-)/', '$0%', $str); 

// if you want to more specifically 
$ret = preg_replace('/\d+(?=-\d+%)/', '$0%', $str); 
1

使用

$str = 'text 30%-50% text'; 
echo preg_replace('/([\d]+)\-[\d]+%/','$1%', $str); 
1

試試這個:

<?php 
$text = 'someText 50-90% someText'; 
// match all text like 50-90%, 6-10% etc 
preg_match('/(^[^\d]*)(\d*\-\d*\%)(.*)/', $text, $matches); 
$matches[2] = str_replace('-', '%-', $matches[2]); 
array_shift($matches); 
$text = implode('', $matches); 
?> 

希望這有助於。