如何避免正则表达式中多个连续出现的字符?

时间:2013-11-08 09:44:53

标签: java regex

我想匹配任何可以用一个或多个点分隔的字母数字:

  1. 贝尔蒂
  2. bert.123
  3. bert.01.03.27
  4. 但不是:

    1. .bert(点不分离)
    2. bert123。 (点不分离)
    3. bert ... 123(多个连续出现的点)
    4. 现在我有^[^\\.][\w\.]+?[^\\.]$,但仍然无法处理点字符的多个连续出现。

5 个答案:

答案 0 :(得分:1)

这应该有效:

^(\w+\.)*\w+$

如果您愿意,可以将\w替换为更具限制性的内容(例如,[a-z]

答案 1 :(得分:1)

你想要的是^\w++(\.\w++)*$

至少一个字母数字字符,后跟任意数量的只有一个点的组,后跟至少一个字母数字字符。

答案 2 :(得分:0)

我认为这应该有用

boolean ok = !str.matches(".*[^0-9a-zA-Z.].*|\\..*|.*\\.|.*\\.{2,}.*")

答案 3 :(得分:0)

试试这个(不确定它是不是你想要的......):

Pattern p = Pattern.compile("^[^\\.][\\w\\.]+[^\\.]$");

答案 4 :(得分:0)

Pattern dotSeparated = Pattern.compile("^\\w+(\.\w+)*$");  

如果需要,请将\w替换为[A-Za-z0-9]\\p{Alnum},因为\w也允许使用下划线。

这匹配一个或多个字母数字字符,后跟零点或多点[a点,后跟一个或多个字母数字字符]。