验证java中的字符串

时间:2014-08-26 16:08:53

标签: java regex string

我有一个字符串,数据用逗号分隔,如下所示:

$d4kjvdf,78953626,10.0,103007,0,132103.8945F,

我尝试了以下正则表达式,但它与我想要的字符串不匹配:

[a-zA-Z0-9]+\\,[a-zA-Z0-9]+\\,[a-zA-Z0-9]+\\,[a-zA-Z0-9]+\\,[a-zA-Z0-9]+\\,[a-zA-Z0-9]+\\,

2 个答案:

答案 0 :(得分:2)

数据字符串开头的$与正则表达式不匹配。将第一个字符类更改为[$a-zA-Z0-9]。并且一些逗号分隔值包含一个文字点。 [$.a-zA-Z0-9]将涵盖这两种情况。此外,通过将^$分别添加到正则表达式的开头和结尾,将正则表达式锚定在开头和结尾可能是个好主意。对于完整的正则表达式如何:

^[$.a-zA-Z0-9]+\\,[$.a-zA-Z0-9]+\\,[$.a-zA-Z0-9]+\\,[$.a-zA-Z0-9]+\\,[$.a-zA-Z0-9]+\\,[$.a-zA-Z0-9]+\\,$

更新

您说逗号的数量是您的主要匹配条件。如果应该有6个逗号,这将有效:

^([^,]+,){6}$

这意味着:匹配至少1个不是逗号的字符,后跟逗号。并连续6次执行上述比赛。注意:您的数据必须以尾随逗号结尾,与您的示例数据一致。

答案 1 :(得分:0)

那么你的正则表达式肯定是无法表达的 - 有明显的字符(比如$.)你的表达式不匹配,你不需要\\逃脱,秒。让我们先描述一下我们的要求,你似乎在说一个有效的字符串被定义为:

  

由6个逗号组成的字符串,每个逗号前有一个或多个字符

我们可以用以下模式表示:

(?:[^,]+,){6}

这表示匹配一个或多个非逗号,后跟逗号 - [^,]+, - 六次 - {6}(?:...)表示法是non-capturing group,它让我们说整个子表达式匹配六次,没有它,{6}只适用于前一个字符。


或者,我们可以使用普通的捕获组让我们选择匹配字符串的每个部分:

([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),?

现在我们不仅可以匹配字符串,还可以同时提取其内容,例如:

String str = "$d4kjvdf,78953626,10.0,103007,0,132103.8945F,";
Pattern regex = Pattern.compile(
  "([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),?");
Matcher m = regex.matcher(str);

if(m.matches()) {
  for (int i = 1; i <= m.groupCount(); i++) {
    System.out.println(m.group(i));
  }
}

打印:

$d4kjvdf
78953626
10.0
103007
0
132103.8945F