【问题标题】:QRegularExpression wildcard matchingQRegularExpression 通配符匹配
【发布时间】: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。我试试看。

标签: c++ regex qt


【解决方案1】:

我会考虑使用 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/。

希望对您有所帮助。

【讨论】:

  • QRegExp 没有被替换或正在被 QRegularExpression 替换?
  • 在很多方面,是的,但它还没有被弃用。 Qt 中的一些类只采用QRegExp 而没有采用QRegularExpression... 这是qt5 文档中QRegExp 末尾的注释:Note: In Qt 5, the new QRegularExpression class provides a Perl compatible implementation of regular expressions and is recommended in place of QRegExp. doc.qt.io/qt-5/qregexp.html#details 这是另一个相关的链接:stackoverflow.com/questions/29532836/…
  • 感谢您的澄清
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
相关资源
最近更新 更多