我想在搜索框中为我的应用程序的用户提供通配符匹配。我有一个QTableView,其中包含制造中使用的零件的详细信息,obe column是零件编号,是一个带有“ - ”的字母数字字段。我喜欢用户能够在搜索框中输入“123 *”以隐藏所有不以“123”开头的部分。与“* 678”,“* 66 * 88 *”等类似,即搜索字符串中有多个通配符。
我正在查看QRegularExpression文档,并在“QRegExp用户注意事项”部分中看到了这一点:
QRegularExpression中没有等效的通配符匹配。 然而,将通配符语法中的正则表达式重写为 考虑到事实,Perl兼容的正则表达式是一项非常容易的任务 QRegExp支持的通配符语法非常简单。
您能告诉我如何“非常轻松地”将“* 88 * 99 *”字符串重写为正则表达式吗?
我应该说我的一些用户都是技术人员,并且会欣赏在搜索领域使用正则表达式的能力,但大多数都不是,我想给他们一个简单的通配符选项('我是一个亲切的编码器:))。
答案 0 :(得分:5)
我会考虑将QRegExp
与setPatternSyntax(QRegExp::Wildcard)
一起使用。
http://doc.qt.io/qt-5/qregexp.html#PatternSyntax-enum
QRegExp::Wildcard
1这提供了一种简单的模式匹配语法,类似于shell(命令解释器)用于“文件通配”的语法。请参阅通配符匹配。
http://doc.qt.io/qt-5/qregexp.html#wildcard-matching
c
任何角色都代表自己与下面提到的角色不同。因此c匹配字符c。
?
匹配任何单个字符。它与完整正则表达式中的.
相同。
*
匹配任何字符的零个或多个。它与完整正则表达式中的.*
相同。
[...]
字符集可以用方括号表示,类似于完整的正则表达式。在字符类中,像外部一样,反斜杠没有特殊含义。
要求普通最终用户处理正则表达式可能会很多。 Windows搜索和其他基本搜索功能支持的文件通配对于大多数用户来说更容易吞下。因此,对于QRegExp::Wildcard
,您正在使用正则表达式的受限子集,如上所述。
对于随机附注:在SQL中,它使用%
作为带有LIKE
关键字的通配符。
如果您想在正则表达式中使用,我建议您尝试使用http://regexr.com/。
希望有所帮助。