4

2つの用語の間に文字列が見つかった場合はそれを置き換える文字列置換を実行したいので、次のような文字列がある場合:

"123 pre 456 post"

私は得ることができます:

"123 pre 789 post"

私は次のようなことをすることでこれを行うことができます:

string.sub(/(pre\s+)\S+(\s+post)/, "\\1789\\2")

ただし、可能であれば2つのキャプチャを使用しないようにします。実際、代わりに次のような正規表現を使用したいと思います/pre\s+(\S+)\s+post/。キャプチャの範囲を取得してから、それを置き換えます。(標準のRubyライブラリを使用して)それを行う方法はありますか?

4

2 に答える 2

6

You could do like this:

"123 pre 456 post".sub(/(?<=pre)\s+\S+\s+(?=post)/, ' 789 ')
于 2012-12-20T11:05:50.927 に答える
2

[]=オペレーターはこれを行いますが、文字列をその場で変更します

s = "123 pre 456 post"
s[/pre\s+(\S+)\s+post/] = '789'

rexep マッチ全体を置換し、

s = "123 pre 456 post"
s[/pre\s+(\S+)\s+post/, 1] = '789'

指定されたキャプチャ グループを置き換えます (名前付きキャプチャ グループでもこれを行うことができます)。

1.8.7 (名前付きのキャプチャ グループはないと思いますが) および 1.9 で動作するはずです。

于 2012-12-20T11:43:20.807 に答える