SublimeText2の正規表現で検索置換を行うことを検討しています。これに関するドキュメントはかなり貧血です。具体的には、グループを置き換えたいので、このテキストを変換するようなものです。
Hello my name is bob
そしてこの検索語:
何を見つける:my name is (\w)+
と置換する:my name used to be $(1)
検索語は問題なく機能しますが、正規表現グループを使用して実際に置換を行う方法がわかりません。
SublimeText2の正規表現で検索置換を行うことを検討しています。これに関するドキュメントはかなり貧血です。具体的には、グループを置き換えたいので、このテキストを変換するようなものです。
Hello my name is bob
そしてこの検索語:
何を見つける:my name is (\w)+
と置換する:my name used to be $(1)
検索語は問題なく機能しますが、正規表現グループを使用して実際に置換を行う方法がわかりません。
通常、後方参照は最初のキャプチャグループ(括弧内のパターンの最初の一致)の$1
or \1
(バックスラッシュ1)であり、実際、Sublimeは両方の構文をサポートしています。だから試してみてください:
my name used to be \1
また
my name used to be $1
また、元のキャプチャパターンにも注意してください。
my name is (\w)+
は正しくなく、名前全体ではなく、名前の最後の文字のみをキャプチャします。名前のすべての文字をキャプチャするには、次のパターンを使用する必要があります。
my name is (\w+)
ちなみに、上記の質問では:
にとって:
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」と一致しますが、置き換えたいグループではありません。
重要:
( )
検索文字列には括弧を使用してください
前の答えは正しいですが、強調すべき重要なことがあります!置換文字列で使用する検索文字列内の一致するすべてのセグメントは、括弧で囲む必要があります。そうでない場合、これらの一致するセグメントは、、、などの定義済み変数にアクセスできません。( )
$1
$2
\1
\2
たとえば、「em」を「px」に置き換えますが、数字の値は保持します。
margin: 10em; /* Expected: margin: 10px */
margin: 2em; /* Expected: margin: 2px */
margin: $1px
またはmargin: \1px
margin: ([0-9]*)em
//括弧付き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 */
9つを超えるキャプチャグループを使用する場合は、構文を使用する必要があることに注意してください${10}
。
$10
または\10
または動作し\{10}
ません。
SearchandReplaceに関するSublimeTextUnofficial Documentationの記事を+(.+)
見ると、あなたが望むかもしれないキャプチャグループのように見えます...しかし、私は個人的に使用(.*)
し、それはうまく機能しました。あなたが言っている方法で置き換えるために、あなたはフォーラムでのこの会話、特に最初にキャプチャされたグループを使用するために単に使用することを言うこの投稿が好きかもしれません。$1
そして、写真は言葉よりも優れているので...