1

Java/Android では、フォーマット文字列を使用して、見通しがどのように見えるかを指定できます。これらのフォーマット文字列は、たとえば、String.format()またはに渡すことができます。Formatter()

簡単な例は%sまたは%1$dです。

ここで、JavaScript で動作し、特定のテキストから Java の書式文字列を抽出できる RegEx を書きたいと思います。

私の解決策は、次の正規表現になります。

%(([0-9]+\$)?)([,+ (\-#0]*)([0-9]*)(.[0-9]*)((hh|h|l|ll|L|z|j|t)*)(d|i|u|f|F|e|E|g|G|x|X|o|s|S|c|C|a|A|b|B|h|H|p|n|%)

ただし、これは最も簡単なケースでも機能しません ( %s)。しかし、他のすべての(より複雑な)ケースではうまくいくようです。

ここで質問したいのは、これは良い (正しい) RegEx だと思いますか、それとも何か不足していると思いますか?

構文のソースは次のとおりです: Android の Formatter クラスprintf フォーマット文字列

4

1 に答える 1

4

問題は次のグループにあります。(.[0-9]*)

%最初にが期待.され、次に上記のグループの が何かの 1 つが期待されます (オプションではありません)。それから(d|i|u|f|F|e|E|g|G|x|X|o|s|S|c|C|a|A|b|B|h|H|p|n|%)また何かを期待しています。

したがって、基本的に正規表現で必要な項目は次のとおりです
。 1. %
2. 3..(.[0-9]*)
(d|i|u|f|F|e|E|g|G|x|X|o|s|S|c|C|a|A|b|B|h|H|p|n|%)

と 、および をプルしたいチャンクの両方%sを収容する余地がありません。%.s

あなたが何になりたいのか正確にはわかりません(.[0-9]*)が、オプションにすることで、(.[0-9]*)?少なくとも%s合格することができます。

于 2013-08-19T00:16:05.137 に答える