android正则表达式只有非数字

时间:2014-02-12 09:15:33

标签: android regex match

我需要一个正则表达式来匹配一串数字的字符串。鉴于我对正则表达式的了解有限,我假设.*表示与以下reg表达式匹配的任意数量的字符。

因此,我认为这样可行:

.*[\\D]

但不幸的是没有。相反,这有效:

.*[\\D].* 

任何人都可以向我解释或至少指出我在哪里可以理解这一点?我发现的java网站和大多数网站都不够简单。

3 个答案:

答案 0 :(得分:0)

重点'。'意味着一切,这可以是一个数字,或任何字符或符号。明星'*'表示数量,这意味着它可以显示它想要的数量,零到无穷大。 '\ D'表示非数字 所以在你的第一个正则表达式中,字符串必须以非数字结尾。

123blablub -> match
blablub123 -> no match

在你的第二个正则表达式中,非数字后跟任何出现零次或多次的字符。用文字表示:你的第二个正则表达式与包含一个或多个非数字的每个字符串匹配。

123blablub -> match
blablub123 -> match

答案 1 :(得分:0)

.匹配任何字符。

*是一个与前一个标记匹配任意次数的量词,包括0。

因此.*匹配任意数量的任何字符。

[]表示一个字符类。允许类中的任何字符。例如,[abc]匹配abc一次。

\D是非数字的字符类。 (您需要转义\,因为它也是Java字符串文字中的特殊字符。)您可以在字符类中组合字符类,以使[\D]有效,尽管将其写为{{} { {1}}。

基本上你的正则表达式是:以任意数量的任何字符开头,后跟一个非数字,后跟任意数量的任何字符。这与说必须至少有一个非数字基本相同。

答案 2 :(得分:0)

这会尝试按模式匹配您的整个输入。如果所有字符都是非数字,它只会返回true。

您可以使用模式“(\ d +)”并返回!m.matches()