CAtlRegExp格式的正则表达式不起作用?

时间:2018-12-06 09:34:52

标签: c++ regex mfc atl

我创建了一个正则表达式来捕获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

有人可以协助吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

您似乎可以使用

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

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

  

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

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