PCREでは、文字の繰り返しを3回または5回指定する次の方法よりも良い方法はありますか?
/(\d{3})|(\d{5})/
式を短くするための特別な反復量指定子はありますか?
/\d{3,5}?/ もしかして? キャプチャブラケットは本当に必要ですか?
あなたもできると思います:
Edit2:貪欲な指定子 \d{2}?
をオプションの量指定子に修正しました。
/(\d{3}(?:\d{2})?)/
中括弧付き量指定子に関する追加コメント -
これを考慮してください:
フォームの指定された正確な量 {n,n}
または{n}
貪欲な指定子の影響は何ですか?
Perlのドキュメントによると
{n}? Match exactly n times, not greedily
{n}+ Match exactly n times and give nothing back (redundant)
影響は何もありません。正確な量が一致する必要があること以外に意味はありません。
明らかにここに穴があります。
また、量指定子としてではなく
、リテラルとして解析されるsyntax
の形式の穴もあります。{,n}
これらのケースではエラーが生成されないため、かなり混乱します。
この形式に完全に適合する量指定子構造が必要であり、使用されています。
{n}? Match exactly n times, or match nothing
{,n,o,p, ..} Match the most either n,o,p, times (where n < o < p)
{,n,o,p, ..}? Match the least either n,o,p, times (where n < o < p)
これsyntax hole'
が使用/埋められた場合、OPの質問は
簡単な方法で答えることができます/(\d{,3,5})/
より広い文脈では、これは正規表現に計り知れない力を追加します。
そしておそらく、このリストのような構文は
本質的にアトミックであるため、バックトラッキングが劇的に減少します。
@Tim Pietzcker の編集 - 返信
が遅れて申し訳ありません。Curyly 量指定子に「正確な」構造があるとは思いません。表記はショートカットです。あなたが示唆しているように、最小/最大しかありません(間違っている場合は修正してください)。Perl regex デバッガーでしか見ることができません。これは、表記法がエンジンから見たとおり{n}
に解析されることを示唆しています。{n,n}
最適化は変更されません。これは、すべてのドキュメント (およびすべてのドキュメントがこれを持っている) によると、正確な略記法で「可能な限り少ない」ままである、怠惰な量指定子に関する悪い紛らわしい表記法だと思います。この省略形は削除するか、実際に便利なものに使用する必要があると思います{n}?
-省略形の(?:x{n})?
. あなたのコメントとは関係ありませんが、それが私のポイントです。