0

我有一个带有数字的 txt 文件:

1-2 c., 3-6 c., 7-8 c., 12-15 c. etc. 

我需要用“和”分隔相邻的数字(示例中的 1-2 和 7-8),而其余的数字我想保持原样,这样我就得到了:

1 and 2 c., 3-6 c., 7 and 8 c., 12-15 c. etc.

如果我想替换所有连字符,我可以这样做:

$newtxt = preg_replace('#(\d+)-(\d+)#', '$1 and $2', $txt);

我可以使用 PHP 的其他方式轻松地做到这一点,但问题是我只需要借助正则表达式来做到这一点。那可能吗?

4

2 回答 2

1

您可以使用 preg_replace_callback 并使用该功能。它不是完全正则表达式,但接近它。

function myCallback ($match){
   if($match[1] == $match[2]-1){
       return $match[1]." and ".$match[2];
   } else {
       return $match[0];
   }
}
preg_replace_callback(
    '#(\d+)-(\d+)#',"myCallback",$txt
);

希望能帮助到你。

于 2012-05-23T19:02:40.037 回答
0

您需要preg_replace_callback它允许您编写一个函数,该函数根据匹配和捕获的字符串返回所需的替换字符串。

$str = '1-2 c., 3-6 c., 7-8 c., 12-15 c. etc. ';

$str = preg_replace_callback(
  '/(\d+)-(\d+)/',
  function($match) {
    return $match[2] == $match[1] + 1 ? "$match[1] and $match[2]" : $match[0];
  },
  $str
);

echo $str;

输出

1 and 2 c., 3-6 c., 7 and 8 c., 12-15 c. etc. 
于 2012-05-23T19:07:59.693 回答