【问题标题】:Regular Expression in CAtlRegExp format not working?CAtlRegExp 格式的正则表达式不起作用?
【发布时间】:2019-05-07 23:13:29
【问题描述】:

我创建了一个正则表达式来捕获 Microsoft Office 可执行文件,如下所示:

 .*(\\Microsoft Office\\Office)(\d){1,2}(\\)(WINWORD.EXE|EXCEL.EXE|POWERPNT.EXE|MSACCESS.EXE|OUTLOOK.EXE|VISIO.EXE|WINPROJ.EXE)$

反正我用的软件只支持CAtlRegExp风格的正则表达式,上面的不行。

我正在查看以下文章以供参考并使用该工具测试我的正则表达式: https://www.codeproject.com/Articles/13320/Using-Regular-Expressions-in-MFC

一个示例路径是:

C:\Program Files (x86)\Microsoft Office\Office14\WINWORD.EXE

有人可以帮忙吗?

谢谢。

【问题讨论】:

  • 尝试将(\d){1,2} 替换为\d\d?。此外,在扩展之前转义所有 . 是有意义的。试试.*\\Microsoft Office\\Office\d\d?\\(WINWORD|EXCEL|POWERPNT|MSACCESS|OUTLOOK|VISIO|WINPROJ)\.EXE$

标签: c++ regex mfc atl


【解决方案1】:

看来你可以用

.*\\Microsoft Office\\Office\d\d?\\((WINWORD)|(EXCEL)|(POWERPNT)|(MSACCESS)|(OUTLOOK)|(VISIO)|(WINPROJ))\.EXE$

这里的重点是(...) 内的所有替代项也必须用括号括起来,并且正则表达式不支持有限(间隔)量词,并且{...} 定义了一个 捕获组从零开始的 ID。 \d\d? 匹配 1 位或 2 位数字。见docs you refer to

您可以注意到语法与 Perl 中的语法并不完全相同。例如,分组运算符是 {},而在 Perl 中是 (),它没有 Perl 语法中的 {n}(精确匹配 n 次)

另请注意,文字点应使用\. 定义,并且最好在所有分组替代项之后仅使用一个\.EXE

【讨论】:

  • 谢谢,但是当我在我提到的工具中测试它时,它似乎不匹配。我什至试图将其简化为这个,但它仍然不起作用? (WINWORD|EXCEL|POWERPNT|MSACCESS|OUTLOOK|VISIO|WINPROJ)\.EXE$
  • @Captain_Planet 这很奇怪,因为文档中提到| 是一个交替运算符,但| 似乎不适用于该演示应用程序。
  • @Captain_Planet 刚刚获得与.*\\Microsoft Office\\Office\d\d?\\((WINWORD)|(EXCEL)|(POWERPNT)|(MSACCESS)|(OUTLOOK)|(VISIO)|(WINPROJ))\.EXE$ 的“成功匹配”。请在目标环境中测试。
  • 太棒了——行得通!您可以编辑您的答案(上图),以便我将其标记为答案吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 2020-07-08
  • 2015-06-19
  • 2013-09-08
相关资源
最近更新 更多