preg_replace只替换之间(括号)

时间:2012-09-25 05:54:08

标签: php regex

我有以下字符串

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

4 个答案:

答案 0 :(得分: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%

答案 1 :(得分: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);

答案 2 :(得分:1)

使用

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

答案 3 :(得分: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 );
?>

希望这有帮助。