regex QRegularExpression通配符匹配

p1tboqfb  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(223)

我想为我的应用程序的用户提供搜索框中的通配符匹配。我有一个QTableView,其中填充了制造中使用的零件的详细信息,obe列是零件号,它是带有一些“-"的字母数字字段。我希望用户能够在搜索框中输入“123*”,以隐藏所有不以“123”开头的零件。类似地,对于“678”,“6688”等。即搜索字符串中包含多个通配符。
我正在查看QRegularExpression文档,并在“QRegExp用户注意事项”一节中看到了这一点:
QRegularExpression中没有通配符匹配的等价物。然而,将通配符语法的正则表达式重写为Perl兼容的正则表达式是一项非常容易的任务,因为QRegExp支持的通配符语法非常简单。
你能告诉我如何“非常容易地”将“8899*”字符串重写为正则表达式吗?
我应该说,我的一些用户是技术人员,他们会欣赏在搜索字段中使用regexp的能力,但大多数人不是,我想给他们提供简单的通配符选项(因为我是一个善良的编码员:)。

lmvvr0a8

lmvvr0a81#

我会考虑将QRegExpsetPatternSyntax(QRegExp::Wildcard)一起使用。
http://doc.qt.io/qt-5/qregexp.html#PatternSyntax-enum
QRegExp::Wildcard 1这提供了一个简单的模式匹配语法,类似于shell(命令解释器)使用的"文件globbing"语法。
http://doc.qt.io/qt-5/qregexp.html#wildcard-matching
c除了下面提到的字符外,任何字符都代表自己,因此c匹配字符c。
匹配任何单个字符。它与完整正则表达式中的.相同。
*匹配零个或多个任意字符。它与完整正则表达式中的.*相同。
[...]字符集可以用方括号表示,类似于完整的正则表达式。在字符类中,反斜杠没有特殊的含义。
要求普通用户处理正则表达式可能会很麻烦。Windows搜索和其他基本搜索功能支持的文件全局搜索对大多数用户来说要容易接受得多。因此,使用QRegExp::Wildcard时,您使用的是正则表达式的一个受限子集,如上所述。
顺便说一句:在SQL中,它使用%作为通配符,并带有LIKE关键字。
如果您想在一般情况下尝试使用正则表达式,我建议您尝试使用http://regexr.com/
希望能有所帮助。

cgyqldqp

cgyqldqp2#

这是一个老问题,但我想给那些将代码移植到Qt6的人留下一个代码示例。从Qt 5.15开始,您可以使用静态方法QRegularExpression::wildcardToRegularExpression

QString wildcardExp = QRegularExpression::wildcardToRegularExpression("*.jpeg");
QRegularExpression re(QRegularExpression::anchoredPattern(wildcardExp),
                      QRegularExpression::CaseInsensitiveOption);
re.match(file).hasMatch();

相关问题