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