1

誰かが括弧の間のテキストの一部を置き換える正規表現を私に提供できますか?

例: 私は文字列を持っています

    123 (abc,def) 567

そして私はで終わりたい

    123 (abc def) 567

したがって、基本的には、括弧の間の「、」文字を置き換えたいと考えています。

よろしくお願いします。正規表現について知っていたことのほとんどを忘れてしまったようです。

ロバート

4

5 に答える 5

4

これはうまくいくはずです:

$s = '123 (abc,def) 567';

echo preg_replace('/(\([^)]*),([^)]*\))/', '$1 $2', $s);
于 2013-04-01T17:16:07.080 に答える
1

少しきれいですが、シンプルです。

<?php
$string = '123 (abc,def) 567';

$string = preg_replace('!,!',' ',$string);

echo $string;

?>

出力は次のとおりです。

123 (abc def) 567

要求通り。

アップデート

苦情を和らげるために、別のバージョンは次のようになります。

$string = '123 (abc,def) 567';

$string = preg_replace('!([^,]+),(.+)!','$1 $2',$string);

echo $string;

括弧の間のコンマのみを削除していることを示す別の更新

$string = '123 (abc,def) 567';

$string = preg_replace('!(\([^,)]+),(.+\))!','$1 $2',$string);

echo $string;

これが元の質問だったわけではありません。括弧の間のすべてのコンマを置き換えるには、このようにすることができます

$strings = array('123 (abc,def) 567','(),(zefzef)','(,abc)','(def,hij,nop,abc),(abc,) 123');

foreach($strings as $string){
  echo "Before: $string = ";    
    while(preg_match('!(\([^,)]*),(.+\)?)!',$string)){
        $string = preg_replace('!(\([^,)]*),(.+\)?)!',"$1 $2",$string);
    }
  echo "After: $string\n";
}
于 2013-04-01T17:16:58.057 に答える
0

これは PHP で動作します。(preg_replace_callback を使用できる場合):

 function commas($matches){return str_replace(',',' ',$matches[0]);}
 echo preg_replace_callback('/(\(.*\))/i','commas','123 (abc,def) 567');

または1行で:

echo preg_replace_callback('/(\(.*\))/i',create_function('$matches','return str_replace(","," ",$matches[0]);'),'123 (abc,def) 567');
于 2013-04-01T18:04:42.720 に答える
0

編集:
再帰的な括弧がない場合、これは魅力のように機能します:

/,(?=[^(]*?\))/

もちろん、空白に置き換えられます。

于 2013-04-01T17:26:10.543 に答える
0

この正規表現を確認してください。これはあなたを助けるでしょう。

,(?=[^\(]*\))

デモをチェック

于 2013-12-24T12:56:49.580 に答える