我是Qt和C ++编程的初学者。我想在我的行编辑中使用正则表达式验证器,它不允许在点(。)之后写点(。)。这是我用过的正则表达式:
QRegExp reName("[a-zA-Z][a-zA-Z0-9. ]+ ")
但这对我的任务来说还不够。请有人帮助我。
我正在寻找类似的东西 - 例如:
“camp.new”。 (接受)
“camp..new”(不接受)
“ca.mp.n.e.w”(已接受)
答案 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引擎锚定的东西,你可以简化一点:
(?:[^.]|\.(?!\.))*