Saya cuba mencari cara untuk memadankan corak dengan regexp.Regexp
menggunakan Go.
Kriteria pertandingan adalah seperti berikut:
FooBar
或其子字符串 Foo
di awal baris, atau tidak sama sekali. S+
)Jadi, ia sepatutnya sepadan, contohnya:
FooABC
FooBarABC
FooBar
(kerana tiada watak lain selepasnya) ABC
(因为它不是以 Foo
)Saya telah mencuba pelbagai ungkapan tetapi seperti tidak dapat memahaminya.
Saya mendapati bahawa mod pandangan ke hadapan negatif wujud dalam pelaksanaan lain, tetapi Go nampaknya tidak menyediakannya. Adakah terdapat cara lain untuk menyelesaikan masalah ini?
Lihat (dikemas kini): https://regex101.com/r/SWSTzv/3
Saya tahu ini jelas boleh diselesaikan tanpa menggunakan regexp
. Walau bagaimanapun, tujuan permintaan ini adalah untuk memahami sama ada masalah ini boleh diselesaikan dengan pelaksanaan stdlib Go. regexp
的情况下解决。然而,这个请求的目的是了解这个问题是否可以通过 Go 的 stdlib 实现来解决。
为什么不直接反转与正则表达式 ^Foo(?:Bar)?$
^Foo(?:Bar)?$
(well, Not just )?
package main import ( "fmt" "regexp" "strings" ) func main() { re := regexp.MustCompile(`^Foo(?:Bar)?$`) str := `Foo FooBar FooA FooB FooBa FooBax FooBxr FooBarAbc FooBarFoo ABC AbcFooBar` for _, s := range strings.Split(str, "\n") { if strings.HasPrefix(s, "Foo") && !re.MatchString(s) { fmt.Println(s) } } }
<code>FooA FooB FooBa FooBax FooBxr FooBarAbc FooBarFoo </code>
Cuba pada rextester.
Kemas kini em>
Satu lagi berdasarkan ungkapan biasa dan menggunakan
package main import ( "fmt" "regexp" "strings" ) func main() { re := regexp.MustCompile(`^Foo$|^FooBar$|^(Foo.+)`) str := `Foo FooBar FooA FooB FooBa FooBax FooBxr FooBarAbc FooBarFoo ABC AbcFooBar` for _, s := range strings.Split(str, "\n") { submatches := re.FindStringSubmatch(s) if submatches != nil && submatches[1] != "" { fmt.Println(submatches[1]) } } }
Atas ialah kandungan terperinci Pergi Regexp: Padankan perkataan penuh atau subrentetan atau tidak sama sekali. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!