web-dev-qa-db-ja.com

Sublime Text 2の正規表現検索置換

私はSublime Text 2の正規表現に検索置換をしたいと思っています これに関するドキュメント はかなり貧弱です。具体的には、グループを置き換えたいので、このテキストを変換するようなものです。

Hello my name is bob

そしてこの検索用語:

何を見つける:my name is (\w)+

次のものに置き換えます。my name used to be $(1)

検索語は問題なく動作しますが、正規表現グループを使用して実際に置換する方法を見つけることはできません。

403
hackerhasid

通常、後方参照は最初のキャプチャグループ(括弧内のパターンの最初の一致)に対する$1または\1(バックスラッシュ1)のいずれかです。だから試してみてください:

my name used to be \1

または

my name used to be $1

更新: 何人かの人々が指摘したように、あなたのオリジナルの捕獲パターンは正しくなく、名前全体ではなく名前の最後の文字だけを捕獲するでしょう。次のパターンを使用して、名前のすべての文字をキャプチャしてください。

my name is (\w+)
532
Bobulous

ところで、上記の質問では:

にとって:

Hello, my name is bob

部品を探す:

my name is (\w)+

交換部品を使って:

my name used to be \1

戻ります:

Hello, my name used to be b

検索部分を次のように変更します。

my name is (\w+)

そして置き換えはあなたが期待するものになります:

Hello, my name used to be bob

(\ w)+は "bob"と一致しますが、それはあなたが置き換えたいグループではありません。

99
CrnaStena

検索文字列に()括弧を使用する

強調することが重要です。 置換文字列で使用するすべての検索文字列内の一致したセグメントは必ず()で囲まれていますでなければなりません。 $ 1、$ 2、...、\ 1、\ 2、..などの変数で到達可能である.

例:

「em」を「px」に置き換えますが、数値は保持します。

margin: 10em
margin: 2em

そのため、置換文字列としてmargin: $1pxを使用します。


CORRECT:次のように、希望する$1一致セグメントを( )かっこで囲みます。

検索:margin: ([0-9]*)em(括弧付き)

REPLACE TO:margin: $1px

結果:

margin: 10px
margin: 2px

WRONG:次の正規表現パターンは目的の行に一致しますが、一致したセグメントは置換された文字列で$1などの変数として使用できません。

検索:margin: [0-9]*em(括弧なし)

REPLACE TO:margin: $1px

結果:($1は未定義です)

margin: px
margin: px
43
Hrvoje Golcic

これは承認された答えの視覚的な提示です。

enter image description here

42
zeeawan

9つ以上のキャプチャグループを使用する場合は、構文${10}を使用する必要があります。

$10または\10または\{10}は、 ではなく で動作します。

19

Sublime Text Unofficial DocumentationのSearch and Replaceに関する記事 を見ると、+(.+)が必要なキャプチャグループであるように見えますが...私は個人的に(.*)を使用し、うまく機能しました。あなたが言っている方法で置き換えるには、これが好きかもしれません フォーラムでの会話 、具体的には この投稿 は、最初にキャプチャされた最初の_$1グループ。

そして写真は言葉よりも優れているから...

前:before find/replace

After:after find/replace

1
Blairg23