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 に答える