GO で繰り返されるグループをキャプチャする
正規表現 ([A-Z] )(?: "([^"] )")*は、大文字の単語とそれに続く 0 個以上の二重引用符で囲まれた引数をキャプチャするように設計されています。ただし、おわかりのように、最後の引数のみがキャプチャされます。
正規表現について
正規表現は 2 つのキャプチャ グループで構成されます:
この問題は、2 番目のグループが非キャプチャ グループを参照するかっこで囲まれているために発生します。つまり、正規表現は複数の引数に一致しますが、結果変数には最後の引数のみが保存されます。
Solution
すべての引数を取得するには、正規表現を次のように変更します。
re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")+`)
アスタリスク * をプラスに置き換えることにより、2 番目のグループがキャプチャ グループになります。
サンプル コード
package main
import (
"fmt"
"regexp"
)
func main() {
re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")+`)
results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)
fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
fmt.Println("Arg:", arg[2])
}
}
遊び場
https://play.golang.org/p/8WmZ0yuHHzj
以上がGo の正規表現で複数の引用符で囲まれた引数をキャプチャする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。