Go の正規表現での定数文字列以外の一致
Go では、正規表現の一致は regexp パッケージを使用して実行されます。このパッケージは強力な機能を提供しますが、先読みがないなどの制限もあります。これにより、定数文字列を除外する場合のように、特定のパターンを除くすべてのパターンと一致させようとする場合に問題が生じます。
パターン /.*/.*/(.*) を使用する最初のアプローチでは、1 つのパターンのみと一致します。目的の文字列の一部が含まれているため、意図した目的には適していません。代わりに、より包括的なパターンが必要です。
否定文字クラスについて
Go 正規表現は、否定文字クラスを利用して、特定の文字または文字のグループを除外します。たとえば、[^/] はスラッシュ (/) を除く任意の文字に一致します。したがって、最初の .* を [^/]* に置き換えると、/.
以外の 0 個以上の文字と一致します。ただし、文字列の 3 つの部分すべてをキャプチャして、最初の部分 ( 2 つのスラッシュ) には特定の文字列は含まれません。これは、パターンを次のように変更することで実現できます。
r := regexp.MustCompile(`^[^/]+/[^/]+/(.*)`)
サブマッチ評価での否定の使用
3 つの部分すべてをキャプチャした後、値を配列として抽出できます。文字列の。最初の要素 (val[1]) は、3 番目のスラッシュの後にキャプチャされた文字列を表します。特定の文字列を除外するには、次の条件が評価されます。
if len(val) > 1 && val[1] != "somestring" { fmt.Println(val[1]) }
条件が満たされる場合 (配列内の複数の要素、および val[1] が "somestring" に等しくない場合)、目的の部分文字列と印刷されています。それ以外の場合は、「一致しません」が表示されます。
一致しない正規表現 Web サービスを使用した代替解決策
Go 正規表現には先読みがないため、http://www を利用できます。 .formauri.es/personal/pgimeno/misc/non-match-regex POSIX 互換の否定パターンを生成する Web サービス。このサービスを使用すると、特定の文字列の否定パターンを取得できます。
結論
Go の正規表現機能は特定の面で制限されていますが、効果的な回避策はあります。必要なマッチング機能を実現します。否定された文字クラスと慎重な部分一致評価を活用するか、非一致正規表現 Web サービスを使用する前述の代替ソリューションを採用することにより、Go 正規表現を使用して定数文字列以外のものを一致させるタスクを実行できます。
以上がGo の正規表現で特定の文字列以外のものと一致するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。