478

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

Hello my name is bob

そしてこの検索語:

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

と置換する:my name used to be $(1)

検索語は問題なく機能しますが、正規表現グループを使用して実際に置換を行う方法がわかりません。

4

6 に答える 6

637

通常、後方参照は最初のキャプチャグループ(括弧内のパターンの最初の一致)の$1or \1(バックスラッシュ1)であり、実際、Sublimeは両方の構文をサポートしています。だから試してみてください:

my name used to be \1

また

my name used to be $1

また、元のキャプチャパターンにも注意してください。

my name is (\w)+

は正しくなく、名前全体ではなく、名前の最後の文字のみをキャプチャします。名前のすべての文字をキャプチャするには、次のパターンを使用する必要があります。

my name is (\w+)
于 2012-08-05T20:41:40.567 に答える
109

ちなみに、上記の質問では:

にとって:

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」と一致しますが、置き換えたいグループではありません。

于 2012-12-05T21:38:49.133 に答える
68

重要:( )検索文字列には括弧を使用してください

前の答えは正しいですが、強調すべき重要なことがあります!置換文字列で使用する検索文字列内の一致するすべてのセグメントは、括弧で囲む必要があります。そうでない場合、これらの一致するセグメントは、、、などの定義済み変数にアクセスできません。( )$1$2\1\2

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

    margin: 10em;  /* Expected: margin: 10px */
    margin: 2em;   /* Expected: margin: 2px */
  • 置換文字列:margin: $1pxまたはmargin: \1px
  • 検索文字列(CORRECT):margin: ([0-9]*)em//括弧付き
  • 検索文字列(INCORRECT):margin: [0-9]*em

正しいケースの例:margin: ([0-9]*)em検索文字列(括弧付き)を使用します。次のように、一致するセグメント($1または\1)を( )括弧で囲みます。

  • 検索:(margin: ([0-9]*)em括弧付き)
  • に置き換える:margin: $1pxまたはmargin: \1px
  • 結果:
    margin: 10px;
    margin: 2px;

誤ったケースの例:検索文字列を使用しmargin: [0-9]*emています(括弧なし)。次の正規表現パターンは目的の行に一致しますが、一致したセグメントは、$1または\1:などの変数として置換された文字列では使用できません。

  • 検索:(margin: [0-9]*em括弧なし)
  • に置き換える:margin: $1pxまたはmargin: \1px
  • 結果:
    margin: px; /* `$1` is undefined */
    margin: px; /* `$1` is undefined */
于 2014-08-07T12:12:42.093 に答える
50

これは、承認された回答を視覚的に表したものです。

ここに画像の説明を入力してください

于 2017-02-15T18:59:12.157 に答える
30

9つを超えるキャプチャグループを使用する場合は、構文を使用する必要があることに注意してください${10}

$10または\10または動作し\{10}ませ

于 2016-09-07T16:16:35.630 に答える
2

SearchandReplaceに関するSublimeTextUnofficial Documentationの記事を+(.+)見ると、あなたが望むかもしれないキャプチャグループのように見えます...しかし、私は個人的に使用(.*)し、それはうまく機能しました。あなたが言っている方法で置き換えるために、あなたはフォーラムでのこの会話、特に最初にキャプチャされたグループを使用するために単に使用することを言うこの投稿が好きかもしれません。$1

そして、写真は言葉よりも優れているので...

前: 検索/交換する前に

後: 検索/置換後

于 2019-06-26T21:17:03.053 に答える