わかりました。notepad++で9番目の後方参照を超えてグループ化しようとしています。ウィキには、グループ命名を使用して9番目の参照を通過できると書かれています。ただし、一致する構文を正しく取得できないようです。簡単にするために、2つのグループから始めます。
サンプルデータ
1000,1000
正規表現
(?'a'[0-9]*),([0-9]*)
docs によると、私は次のことをする必要があります。
(?<some name>...), (?'some name'...),(?(some name)...)
Names this group some name.
しかし、その結果、私のテキストが見つかりません。助言がありますか?
(私がしたように)グーグルからここに着陸する他の人を助けるための非常に遅れた答え。 notepad ++置換での名前付き後方参照は、次のようになります:$+{name}
。理由はともかく。
ここでは、標準の正規表現の落とし穴とは異なりますが、名前付きの後方参照にも番号が付けられています。標準の正規表現では、(.*)(?<name> & )(.*)
がある場合は、$1${name}$2
に置き換えて、最初とまったく同じ行を取得します。 notepad ++では、$1$+{name}$3
を使用する必要があります。
例:構成の不一致がないかVisual Studio.slnファイルをクリーンアップする必要がありました。置き換える必要のあるテキストは次のようになりました。
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.Build.0 = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.ActiveCfg = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.Build.0 = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.ActiveCfg = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.Build.0 = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.ActiveCfg = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.Build.0 = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.ActiveCfg = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.Build.0 = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.ActiveCfg = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.Build.0 = Release|Any CPU
私の検索正規表現:
^(\s*\{[^}]*\}\.)(?<config>[a-zA-Z0-9]+\|[a-zA-Z0-9 ]+)*(\..+=\s*)(.*)$
私の交換用正規表現:
$1$+{config}$3$+{config}
結果:
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.ActiveCfg = Dev|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.Build.0 = Dev|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.ActiveCfg = Dev|x64
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.Build.0 = Dev|x64
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.ActiveCfg = Dev|x86
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.Build.0 = Dev|x86
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.ActiveCfg = QA|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.Build.0 = QA|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.ActiveCfg = QA|x64
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.Build.0 = QA|x64
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.ActiveCfg = QA|x86
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.Build.0 = QA|x86
これが誰かを助けることを願っています。
OK、マッチングは問題ありません。あなたの例は現在のNotepad ++で私にマッチします。これは重要なポイントです。 Notepad ++でPCRE正規表現を使用するには、バージョン> = 6.0が必要です。
もう1つのポイントは、後方参照をどこで使用するかということです。名前付き後方参照は問題なく使用できます正規表現内ですが、置換文字列では使用できません。
手段
(?'a'[0-9]*),([0-9]*),\g{a}
一致します
1000,1001,1000
しかし、名前付きグループまたは置換文字列で9を超えるグループを使用する方法がわかりません。
置換文字列に9つを超える後方参照が本当に必要ですか? 9つを超えるグループが必要で、すべてが置き換えられるわけではない場合は、?:
を追加して、再利用する必要のないグループを作成します非キャプチャグループグループの始まり。
(?:[0-9]*),([0-9]*),(?:[0-9]*),([0-9]*)
group 1 group 2