【发布时间】:2015-11-13 15:52:48
【问题描述】:
我想在搜索框中为我的应用程序用户提供通配符匹配。我有一个 QTableView 填充了制造中使用的零件的详细信息,obe 列是零件号,它是一个带有一些“-”的字母数字字段。我希望用户能够在搜索框中输入“123*”以隐藏所有不以“123”开头的部分。与“*678”、“*66*88*”等类似,即搜索字符串中有多个通配符。
我正在查看 QRegularExpression 文档,并在“QRegExp 用户注意事项”部分中看到了这一点:
在 QRegularExpression 中没有等效的通配符匹配。 尽管如此,将通配符语法中的正则表达式重写为 鉴于事实,Perl 兼容的正则表达式是一项非常容易的任务 QRegExp 支持的通配符语法非常简单。
您能告诉我如何“非常轻松地”将“*88*99*”字符串重写为正则表达式吗?
我应该说我的一些用户是技术人员,并且会喜欢在搜索字段中使用正则表达式的能力,但大多数人不是,我想给他们一个简单的通配符选项('因为我是善良的编码员:))。
【问题讨论】:
-
它只是指 Perl 使用的
.吗?在 PCRE(我认为是 Perl 兼容的正则表达式)中,88*89将匹配8, followed by any number of 8s, followed by 89,因为*绑定到表达式的前一部分。匹配=88888889,不匹配=88abc89。要得到你想要的,在 Perl 中,你需要88.*89,因为.意味着any character。现在88889和88abc89都应该匹配。说了这么多,我没用过QRegExp所以我不知道他们说的是不是这个。 -
您只需要在 Qt 正则表达式中将
*替换为.*即可。.匹配任何字符,包括 Qt 中的换行符。 -
谢谢你们的快速cmets/answers。我试试看。