在Java/Android中,您可以使用Format字符串来指定一些outlook的外观。例如,这些Format字符串可以传递给String.format()
或Formatter()
。
简单的例子是%s
或%1$d
。
现在,我想写一个RegEx,它可以在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格式字符串
问题出在这个组:(.[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|%)
也在期待一些东西。
因此,基本上正则表达式中唯一需要的项是:
1.%
2.(.[0-9]*)
中的.
3.(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
通过。