Sublime Text 2の正規表現で検索置換を実行しようとしています。これに関するドキュメントはかなり貧弱です。具体的には、グループを置換したいので、このテキストを変換するようなものです:
Hello my name is bob
そして、この検索用語:
何を見つける: my name is (\w)+
と置換する: my name used to be $(1)
検索語は問題なく機能しますが、正規表現グループを使用して実際に置換を行う方法がわかりません。
Sublime Text 2の正規表現で検索置換を実行しようとしています。これに関するドキュメントはかなり貧弱です。具体的には、グループを置換したいので、このテキストを変換するようなものです:
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+)
$0
はSublime Text 2/3でスニペット拡張からの出口にカーソルを置くために使用されます。スニペットの詳細。
$0
全体の正規表現一致です。$1
最初のキャプチャグループです。
重要:
( )
検索文字列で括弧を使用してください
前の答えは正しいですが、強調すべき重要なことがあります!すべての検索文字列にマッチしたセグメント、あなたの中で使用したいという置換文字列をしなければならないで囲まれた( )
括弧そうでない場合は、これらの一致したセグメントのような定義された変数にアクセスすることはできません、$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 */
$_SESSION[(\w+)
ですか?感謝
9つを超えるキャプチャグループを使用する場合は、構文を使用する必要があることに注意してください${10}
。
$10
あるいは\10
または\{10}
だろうではない仕事。
1
、2番目のキャプチャグループにを追加して、のように中かっこを使用する必要があります${2}1
。$ 21は存在しない21番目のキャプチャグループを示します。
$0
か?