誰かが括弧の間のテキストの一部を置き換える正規表現を私に提供できますか?
例: 私は文字列を持っています
123 (abc,def) 567
そして私はで終わりたい
123 (abc def) 567
したがって、基本的には、括弧の間の「、」文字を置き換えたいと考えています。
よろしくお願いします。正規表現について知っていたことのほとんどを忘れてしまったようです。
ロバート
誰かが括弧の間のテキストの一部を置き換える正規表現を私に提供できますか?
例: 私は文字列を持っています
123 (abc,def) 567
そして私はで終わりたい
123 (abc def) 567
したがって、基本的には、括弧の間の「、」文字を置き換えたいと考えています。
よろしくお願いします。正規表現について知っていたことのほとんどを忘れてしまったようです。
ロバート
これはうまくいくはずです:
$s = '123 (abc,def) 567';
echo preg_replace('/(\([^)]*),([^)]*\))/', '$1 $2', $s);
少しきれいですが、シンプルです。
<?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";
}
これは 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');
編集:
再帰的な括弧がない場合、これは魅力のように機能します:
/,(?=[^(]*?\))/
もちろん、空白に置き換えられます。