多くの人が、正規表現では怠惰な量限定子を使わずにできるとしていますが、私はそれらがなければ解決できない問題に遭遇しました(私はここでsedを使用しています)。遅延量指定子を使わずに実際に行うことはできますか?
Iで処理したい文字列は、例えば、ワード・レートによって分離されたストリングで構成されている:
anfhwe9.<<76xnf9247 rate 7dh3_29snpq+074j rate 48jdhsn3gus8 rate
Iは3つのダッシュで(離れワード「レート」から)、それらのサブストリングを置換します(---)それぞれ。結果は次のようになります:
私が理解しているところ(私はPerlを知らないからです)は、遅延量制限子を使って簡単に行うことができます。 vimには怠惰な量指定子もあります。私は、このコマンド\{-}
ができるだけ少ないと一致するようにVimを伝え
:s/.\{-}rate/---rate/g
を使用してそれをやりました。
しかし、vimはテキストエディタであり、多くのマシンでスクリプトを実行する必要があり、その中にはPerlをインストールしていないものがあります。正規表現に.*[^(rate)]rate
のような原子グループと一致しないと言うことができますが、うまくいかなかった場合にも解決できます。
どのようにPOSIX正規表現を使用してこれを達成するためのアイデア、またはそれは不可能ですか?
@ikegami "レート"の間に少なくとも1文字を必要とする場合は – Asmor