2016-04-10 8 views
-1

ノンキャプチャグループ(?:...)の使い方について質問があります。RE非キャプチャグループ

\b4[0-9]{12}(?:[0-9]{3})\b 
(?:\d[ -]*?){13,16}\b 

最初のケースでは、抽出される文字列は13桁または16桁です。最後の3桁が表示されるかどうかは、括弧内の{3}が正確に3桁を要求してもかっこのために文字列の条件に基づいていますか? 2番目のケースでは、reをテストして、文字列の長さに数字だけを数えたことがわかりました。ダッシュとスペースは、文字列の長さの境界から同じ括弧内に入れられますが、長さには数えられません。誰もその理由を知っていますか?

ありがとうございました

+0

は質問ごとにアカウントを作成するために停止してください。 –

+0

@CasimiretHippolyteなぜあなたはそれを言うでしょうか?彼はそれをどうやって知っていますか? – Shafizadeh

+0

@Shafizadeh:彼は昨日同じことをしたので。 –

答えて

0

あなたは間違っています。書かれているように、最初のものは正確に16桁を必要とします。 \b4[0-9]{12}(?:[0-9]{3})?\bのように13桁の数字を許可する場合は、一致しないグループの後に?が必要です。

第2のものについては、{13,16}がグループ全体に適用されます。そのグループに対する各試合には、0個以上のスペースまたはダッシュを付けることができます。私は非常によく似た質問への回答でこれを詳細に説明した(おそらく、y'allのは、同じクラスか何かにいる?):

(?:\d[ -]*?){13,16} - confused with the priority that is given in matching the pattern to the given regex

+0

私はリンクの答えを見直しました。それについてのちょうど1つの質問。グループ全体に{13,16}が適用されている場合、正規表現の出力は16の代わりに19の長さになり、上限を超えます。あなたはそれを説明できますか?文字列の長さにダッシュを入れるべきかどうか? – Lucy

+0

@ルーシーあなたは間違った方法を考えています。はい、ダッシュは文字列の長さの一部としてカウントされますが、 '{13,16} 'は文字列の長さを制限しません。これは、グループ全体(?:\ d [ - ] *?)が一致する回数を指定します。そのグループは0個以上のスペースまたはダッシュが続く任意の数字と一致します。したがって、例えば、 '401-2 --- 3- - - - 4 --- --- ---など、長いものとして(1)13-16桁とスペースのみがあるものまたは数字の間にダッシュを付けます。 [このデモ](https://regex101.com/r/qD3qE2/2)が役立つかもしれません。 –

+0

@エド・コットレル今私はundestand。ありがとうございました! – Lucy

関連する問題