|
Iranoan さん
こんにちは、p4936jpです。
アドバイスありがとうございます。
> 正規表現は基本的には最長一致、つまりできるだけ長い範囲で一致するよう
>に検索するので、元の文字列が
>> (A) sprintf( str, "%s%s", psta, pstb ) ;
>> ~~~~~~~~~~~~~~~~~~
>なので、
>> × sprintf\(\f.+\f, → _snprintf(\1, sizeof(\1),
>の置換では、\f に挟まれた部分は、波線部になります。理由は「,」も任意の
>文字だからです。これを防ぐには、最短一致にするか「,」を除外すればよい
最長一致という概念があるとは知りませんでした。
>です。また「 」(空白) も考慮すると、標準設定のままなら
>sprintf\( \f.+?\f, → _snprintf( \1, sizeof(\1),
>設定を変えてあったり、古いヴァージョンなら、
>sprintf\( \f[^,]+\f, → _snprintf( \1, sizeof(\1),
>や、今回の場合 (C 言語の変数部分を \1 としたいので)
>sprintf\( \f\w\f, → _snprintf( \1, sizeof(\1),
>とすれば良いでしょう。
変数の前にスペースがあったりなかったりするので
教えていただいた以下の方法を若干調整して変換することが
できました。
>sprintf\( \f\w\f, → _snprintf( \1, sizeof(\1),
正規表現は難しいです。・・・
ありがとうございました。
|
|