Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex QT正则表达式_Regex_Qt - Fatal编程技术网

Regex QT正则表达式

Regex QT正则表达式,regex,qt,Regex,Qt,昨天我问了一个关于如何限制可能性的表达: 仅添加%D、%C、%S和字符- 所有操作只执行一次,因此不允许生成%%或%DD或-,以及类似内容 我得到的答案是: ^(?!.*(.)\\1)%[%SCD-]*$ 这是我问题的答案,但我还需要在字符串中限制%D、%S和%C一次 你知道怎么把这限制在一次吗 One time: %D-%D .... <- Not 一次:%D-%D 对于正则表达式,我唯一能想到的就是使用所有可能输入的排列,并用许多正则表达式生成一个大的or'ed语句。四种可能的输入

昨天我问了一个关于如何限制可能性的表达:

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

所有操作只执行一次,因此不允许生成%%或%DD或-,以及类似内容

我得到的答案是:

^(?!.*(.)\\1)%[%SCD-]*$
这是我问题的答案,但我还需要在字符串中限制%D、%S和%C一次

你知道怎么把这限制在一次吗

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

一次:%D-%D 对于正则表达式,我唯一能想到的就是使用所有可能输入的排列,并用许多正则表达式生成一个大的or'ed语句。四种可能的输入只出现一次,剩下16种可能的排列

例如:

(ABC)|(ACB)|(CBA)|(CAB)|(BAC)|(BCA)
更通用/实用的处理方法是利用
QValidator

我将子类化
QValidator
,并使其成为您自己的

当输入无效或不工作时,我会让附近的另一个标签实时更新,删除多余的输入,以便显示他们输入的内容中允许的内容

希望能有所帮助。

,我给你这个带有

您说过希望字符串以
%[DCS-]
开头(但不是
^%
),并且以下字符串不应具有双精度
%
c

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

不管怎样,根据你的问题,这应该行得通

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

那么,什么是有效的和无效的?您能提供吗?有效的是%S-%D-%C无效:什么不是%S%D%C三个%S值是字符串模式的占位符%S是字符串%D是日期%C是计数器,每个模式只允许有一次。但也允许不使用模式。因此,如果用户愿意,最后的字符串可以是%S,但不能是%S%S。在我输入%D时,我确实不能再输入%D了,但在您的解决方案中,我不能在添加%D后添加%S或%C。我接受的答案与我想要的完全一致。现在我想将其限制为%D、%C和%S一次。@pixbye我的第二个正则表达式如何,这是你的问题?抱歉,不。添加%S-%I后,我不允许输入D或C,因此你的演示显示%S-%D不匹配。你的要求完全不清楚,不要让其他人猜测,因为你将非常缓慢地找到正确答案。请严格且友好地提供您的信息。请先检查我的答案是否正确,然后我将在稍后为您添加更多解释。我使用RedEx作为我自己的验证器。mDiskCustomPattern=new QLineEdit(ConfigurationPage::mSettings.value(“CustomDiskNamePattern”,tr(“%S-%D-%C”)).toString(),this);QRegExp regx(“^(?。*(.)\\1)%[%SCD-]*$”;QValidator*validator=新的QRegExpValidator(regx,mDiskCustomPattern);mDiskCustomPattern->setValidator(验证器);总之,如果允许Iam将字符限制为[%SCD-],则必须能够将SCD限制为一次性使用。
^(?!%%|%D.*?%D|%C.*?%C|%S.*?%S)%(?:(?!%D.*?%D|%C.*?%C|%S.*?%S)[%DCS-])+$