1
0

More than 3 years have passed since last update.

Golangの正規表現でbool値のみを返す

Last updated at Posted at 2020-12-02

概要

タイトルのままですが、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は握りつぶしてはダメ。という開発現場も多いと思います。(実際_して握りつぶすのはどうかと思うわけです)

そんな時はMustCompileMatchStringを使います。
使い方は以下の通り。

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なんかだと単純にtruefalseのbool値だけ欲しい。と言う場合もあるかと思います。
それと同じになりますので今後活用できそうです。

追記

@nobonoboさんよりご指摘を頂きましたので一部修正を加えております。
init処理で正規表現をコンパイルすることで速度の向上が見込めます。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0