正则表达式不允许在点(。)之后写点(。)

时间:2014-02-01 03:26:45

标签: c++ regex qt

我是Qt和C ++编程的初学者。我想在我的行编辑中使用正则表达式验证器,它不允许在点(。)之后写点(。)。这是我用过的正则表达式:

QRegExp reName("[a-zA-Z][a-zA-Z0-9. ]+ ")

但这对我的任务来说还不够。请有人帮助我。

我正在寻找类似的东西 - 例如:

  •   

    “camp.new”。 (接受)

  •   “camp..new”(不接受)

  •   

    “ca.mp.n.e.w”(已接受)

2 个答案:

答案 0 :(得分:1)

怎么样:

^[a-zA-Z](?:\.?[a-zA-Z0-9 ]+)+$

<强>解释

The regular expression:

^[a-zA-Z](?:\.?[a-zA-Z0-9 ]+)+$

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
  ^                        the beginning of the string
----------------------------------------------------------------------
  [a-zA-Z]                 any character of: 'a' to 'z', 'A' to 'Z'
----------------------------------------------------------------------
  (?:                      group, but do not capture (1 or more times
                           (matching the most amount possible)):
----------------------------------------------------------------------
    \.?                      '.' (optional (matching the most amount
                             possible))
----------------------------------------------------------------------
    [a-zA-Z0-9 ]+            any character of: 'a' to 'z', 'A' to
                             'Z', '0' to '9', ' ' (1 or more times
                             (matching the most amount possible))
----------------------------------------------------------------------
  )+                       end of grouping
----------------------------------------------------------------------

答案 1 :(得分:0)

一般来说,你想要做的就是说你得到.的每一点都没有跟着另一个.,否则一切都很好。在这里你需要一个负面的先行断言,但是请记住.是一个RE元字符,所以也会有一些反斜杠。

^(?:[^.]|\.(?!\.))*$

当然,您可能希望进一步调整。

以扩展形式:

^                  # Anchor at start
(?:                # Start sub-RE
   [^.]            #    Not a “.”
|                  #    or...
   \. (?! \. )     #    a “.” if not followed by a “.”
)*                 # As many of the sub-RE as necessary
$                  # Anchor at end

如果你是RE引擎锚定的东西,你可以简化一点:

(?:[^.]|\.(?!\.))*