QT正则表达式

时间:2015-08-28 23:09:18

标签: regex qt

昨天我询问了如何限制可能性的表达方式:

  

仅添加%D,%C,%S和字符 -

一切只有一次,因此不允许制作%%或%DD或 - 和类似的。

我得到的答案是:

^(?!.*(.)\\1)%[%SCD-]*$

这是我的问题的答案,但我还需要在字符串中限制%D,%S和%C一次。

任何想法如何将此限制为仅一次?

One time: %D-%D .... <- Not

2 个答案:

答案 0 :(得分:0)

我唯一想到的就是用正则表达式来做你所要求的事情就是使用所有可能输入的排列,并用许多正则表达式创建一个大或者语句。如果四个可能的输入只出现一次,则剩下16种可能的排列。

示例:

(ABC)|(ACB)|(CBA)|(CAB)|(BAC)|(BCA)

处理此问题的更通用/实用的方法是利用QValidator类。

我会将QValidator子类化为自己的。

http://doc.qt.io/qt-5/qvalidator.html#details

当输入无效或无法正常工作时,我会实时更新附近的另一个标签,删除多余的输入,以便显示输入的内容。

希望有所帮助。

答案 1 :(得分:0)

Yesterday,我用DEMO

给你这个正则表达式
^(?!%%)%(?:(?!%{2}|c{2})[%DCS-])+$

您告诉您希望您的字符串以%[DCS-]开头(但不是^%%),并且以下字符串不应该有双%c

你上面显示的正则表达式完全没有填满你的要求,我不知道为什么你给出的答案是正确的。

无论如何,根据你的问题,这应该有效

^(?!%%|%D.*?%D|%C.*?%C|%S.*?%S)%(?:(?!%D.*?%D|%C.*?%C|%S.*?%S)[%DCS-])+$

DEMO