2016-05-09 4 views
1

なぜ、次の複数行正規表現が機能しないのですか?タグ内の部分文字列と一致すると考えられます。他の単純な複数行のマッチは正しく機能しました。Golang multiline正規表現が機能しない

デフォルトで
func main() { 
    r := regexp.MustCompile(`(?m)<think>(.*)</think>`) 
    const s = `That is 
    <think> 
    FOOBAR 
    </think>` 
    fmt.Printf("%#v\n", r.FindStringSubmatch(s)) 
} 

https://play.golang.org/p/8C6u_0ca8w

+0

てみ '(?m)の([^ <]+)'または非貪欲は( 'サポートされていますか?メートルの場合)(。*?)' – heemayl

答えて

6

、 ""改行にマッチしません。 "s"フラグを指定すると、それが実行されます。私はあなたが "m"を必要とは思わない。

文字列に<think>...</think>が複数ある場合、正規表現は最初の<think>と最後の</think>の間のものすべてと一致します。 .*?を使用すると、最初の内容と一致するだけになります。

+0

私は '.'しかしgolangで' sの程度も同じことを考えました'はデフォルトで設定されています:https://github.com/google/re2/wiki/Syntaxこれは修正されているように見えるので、ドキュメントが間違っていると思います... – Endophage

+0

または、おそらく私はドキュメントを誤読しています。 。 – Endophage

+0

's = true'ならば、新しい行が一致し、デフォルトは' false'です。 –

関連する問題