与Java正则表达式匹配的模式

时间:2016-11-03 03:16:13

标签: java regex

我的服务器dev给了我一个正则表达式,他说是用户名的要求。它是@"^\w+([\s-]\w+)*$"

我需要帮助找出正确的Java表达式。令人困惑,因为我需要放一些转义字符以使编译器满意。

我正在尝试这个。如果这是对的,请告诉我:

Pattern p = Pattern.compile("^\\w+([\\s-]\\w+)*\\$", Pattern.CASE_INSENSITIVE);

   Matcher m = p.matcher(username);

   if ((username.length() < 3 ) || (m.find())) {
      log ("Invalid pattern"); 
      return false;
   }

这是对的吗?

2 个答案:

答案 0 :(得分:3)

正确的模式是"^\\w+([\\s-]\\w+)*$"

$表示字符串的结尾,如果使用\\$,它将强制字符串具有char $,而不是意图。

答案 1 :(得分:2)

在你的正则表达式

^\\w+([\\s-]\\w+)*\\$
                    ^

您无需转义此$。它表示End Of Line。

所以正确的正则表达式是:

^\\w+([\\s-]\\w+)*$

N.B。:但是,您必须确保此$符号不是字面上的$。在这种情况下,你必须逃避它,但我预计在这种情况下它也会在你的源RegEx中被转义。