概要
タイトルのままですが、goの正規表現でbool値のみを返す方法です。
コードと解説
goの正規表現でまず思いつくのがregexp.MatchString
と思いますが、これは2つの返却を行います。
一つはマッチしているかどうかのbool値、もう一つはエラーです。
main.go
package main
import "fmt"
import "regexp"
func main() {
str := "abc"
b, err := IsMatch(str)
if err != nil {
fmt.Println(err)
}
fmt.Println(b)
}
func IsMatch(str string) (bool, error){
return regexp.MatchString(`^[0-9]+$`, str)
}
例えるならこんな感じでしょうか?
めんどくさいのでエラーを_
にしたいな…と思うところです。
が、コーデイング規約等によって、errは握りつぶしてはダメ。という開発現場も多いと思います。(実際_
して握りつぶすのはどうかと思うわけです)
そんな時はMustCompile
とMatchString
を使います。
使い方は以下の通り。
main.go
package main
import "fmt"
import "regexp"
var r *regexp.Regexp
func init() {
r = regexp.MustCompile(`^[0-9]+$`)
}
func main() {
str := "abc"
b := r.MatchString(str)
fmt.Println(b)
}
とてもコードがスッキリしました。
エラーもbuildが通らない時のみのはずですのでerr判定を行う必要もありません。
PHPなんかだと単純にtrue
、false
のbool値だけ欲しい。と言う場合もあるかと思います。
それと同じになりますので今後活用できそうです。
追記
@nobonoboさんよりご指摘を頂きましたので一部修正を加えております。
init処理で正規表現をコンパイルすることで速度の向上が見込めます。