私は彼らの正規表現が失敗する理由を尋ねる質問がたくさんあることを知っていますが、Go / Golangについては特にわかりません。
私はいくつかのメソッドが追加された文字列であるIDタイプを持っています。type ID string
この関数は、IDが有効な場合にブール値を返すことになっています。
私の有効性の基準は:
いくつかの異なるオンラインツールでテストした正規表現は /[A-Z0-9]{20}/
しかし、検証関数を実行するたびに、入力に関係なくfalseが返されます。特に、regexp.MatchString()
関数はfalseとnilを返します。
以下は私の検証関数です。20 /.{20}/
に一致するはずの正規表現を変更しても、matchは常にfalse です。
func (this ID) validate() bool {
regexString := "/[A-Z0-9]{" + strconv.Itoa(MAX_ID_LENGTH) + "}/"
fmt.Println(regexString)
thisStr := this.ToString()
fmt.Println(thisStr)
charCount := utf8.RuneCountInString(thisStr)
fmt.Println(charCount)
thisStr = strings.ToUpper(thisStr)
fmt.Println(thisStr)
match, err := regexp.MatchString(regexString, thisStr)
fmt.Println(match, err)
//Check string length is correct and matches regex.
if charCount != MAX_ID_LENGTH || !match {
return false
} else {
return true
}
}
それは私が関数を使用している方法と関係がありますか?私は困惑しています。
注: .ToUpper()関数が存在するのは、IDが生成されるときに、大文字と0-9でのみ生成されるためですが、後日手動で入力した場合、「abc」を「ABC」として処理する必要があります。
Go正規表現は/
文字で囲まないでください。それらを削除し、それが機能するかどうかを確認します。
/
文字は、作成するときに(JavaScriptやRubyなどの)いくつかの言語で使用されている正規表現リテラルをするので\
、文字が正規表現で頻繁に使用されたときに、通常の文字列のエスケープをダブル必要です。これは一部の言語では便利ですが、通常は実際の正規表現構文の一部ではありません(ただし、すべての言語は正規表現を少し異なって処理します)。
Go言語は正規表現リテラルをサポートしていませんが、文字列リテラルの概念を備えているため、複雑な正規表現を簡単に記述できます。
したがって、たとえば、文字列を見つけるには\.hidden-file-009
、次のように式を記述します。
"\\\\\\.[a-zA-Z0-9\\-_]*"
または、もっと簡単に:
`\\\.[a-zA-Z0-9\-_]*`
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加