Go はパフォーマンス上の理由から正規表現での負の後読みをネイティブにサポートしていませんが、代替戦略を使用して同様の機能を実現できます。
オリジナルを考慮してください正規表現:
\b(?<![@#\/])\w.*
否定された後読みは文字セットのみを検査するため、否定された文字セット自体に置き換えることができます:
\b[^@#/]\w.*
文字が先頭に現れる場合文字列に ^ アンカーを追加します:
(?:^|[^@#\/])\b\w.*
より洗練されたアプローチの場合、フィルター関数は次のようになります。実装されている:
func Filter(vs []string, f func(string) bool) []string { vsf := make([]string, 0) for _, v := range vs { if f(v) { vsf = append(vsf, v) } } return vsf }
このフィルター関数は、Process 関数で使用できます:
func Process(inp string) string { t := strings.Split(inp, " ") t = Filter(t, func(x string) bool { return strings.Index(x, "#") != 0 && strings.Index(x, "@") != 0 && strings.Index(x, "/") != 0 }) return strings.Join(t, " ") }
全体的に、これらの手法により、Go での負の後読みのエミュレーションが可能になり、次の回避策が提供されます。この機能には直接的な言語サポートがありません。
以上がGo 正規表現で負の後読みをエミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。