0

正規表現を使用して (私は PCRE である Autohotkey を使用しています)、どうすれば ini ファイルのセクションを一致させることができますか? 個々のキーを取得する必要はありません。セクション ブロックだけです。

これは、求めているセクションの後にセクションがあれば一致するように見えますが、最後のセクションである場合は失敗します。

iniregex := "ms)(?<=^\[keys\]).*(?=^\[)"

[keys]例、コメントを除外し、空の行を無視しながら、セクションの内容全体を取得したい(test=2しかし、それはキャプチャする必要がありますが、その行のコメントを除外します:

[settings]
settings=0
;settings=1

[keys]
test=0
;test=1
test=2 ;comment
test=3
[nextsection]
this section has an empty and should be caught.

there is an empty line after this line, and it should be caught, too.

    eof

これを見つけましたが、求められたセクション名をどこに置くべきかわかりません。

4

2 に答える 2

1

リンクされた質問から、探しているセクション名をここに入力します。

(?ms)^\[keys](?:(?!^\[[^]\r\n]+]).)*

ただし、キャプチャと同じ正規表現でコメントを削除することはできないと思います。2番目のステップでそれを行う必要があります。

[keys]次のセクションに「0以上」のタイプの量指定子を配置する必要があるため、後にセクションがない場合、正規表現は失敗します。何かのようなもの:

iniregex := "ms)(?<=^\[keys\]).*(?:(?=^\[))?"

于 2013-03-18T01:58:24.603 に答える
1

単一の正規表現でこれを達成することはできません。

できることは、引用に基づいてこの正規表現を使用して、タグ[keys]を含めずにセクションを抽出することです。[keys]

/^(?<=\[keys\]\r\n)(?:(?!^\[).)*(?=\r\n)/ms

その後、抽出されたセクションにこの正規表現を使用して、コメント/空白行を除外できます。

/^[^;\s][^;\r\n]*/gm
于 2013-03-18T02:24:44.333 に答える