Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menangkap Berbilang Hujah yang Dipetik dalam Ungkapan Biasa dalam Go?

Bagaimana untuk Menangkap Berbilang Hujah yang Dipetik dalam Ungkapan Biasa dalam Go?

DDD
DDDasal
2024-10-27 02:39:30860semak imbas

How to Capture Multiple Quoted Arguments in a Regular Expression in Go?

Merakam Kumpulan Berulang dalam GO

Ungkapan biasa anda ([A-Z] )(?: "([^"] )")* direka bentuk untuk menangkap perkataan huruf besar diikuti dengan sifar atau lebih hujah petikan dua, bagaimanapun, seperti yang anda temui, ia hanya menangkap hujah terakhir.

Memahami Regex

Reex terdiri daripada dua kumpulan penangkap:

    ([A-Z] ): Padan dengan perkataan huruf besar.
  1. (?: "([^"] )")*: Padanan hujah yang disebut dua kali. * menunjukkan bahawa kumpulan ini boleh mengulang sifar atau lebih kali.
Isu ini timbul kerana kumpulan kedua disertakan dalam kurungan yang merujuk kepada kumpulan bukan penangkap. Ini bermakna walaupun regex memadankan berbilang argumen, ia hanya menyimpan yang terakhir dalam pembolehubah hasil.

Penyelesaian

Untuk menangkap semua argumen, ubah suai regex kepada:

re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")+`)
Dengan menggantikan asterisk * dengan tambah , kumpulan kedua kini menjadi kumpulan penangkap.

Kod Contoh

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])
    }
}

Taman permainan

https://play.golang.org/p/8WmZ0yuHHzj

Atas ialah kandungan terperinci Bagaimana untuk Menangkap Berbilang Hujah yang Dipetik dalam Ungkapan Biasa dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn