Регулярное выражение в формате CAtlRegExp не работает? - PullRequest
0 голосов
/ 06 декабря 2018

Я создал регулярное выражение для захвата исполняемых файлов 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 голосов
/ 06 декабря 2018

Похоже, вы можете использовать

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

Суть в том, что все альтернативы внутри (...) также должны быть заключены в скобки, и что выражение regex не поддерживает ограниченные (интервальные) квантификаторы, и{...} определяет группу захвата с идентификаторами, начинающимися с нуля.\d\d? соответствует 1 или 2 цифрам.См. документы, на которые вы ссылаетесь :

Вы можете заметить, что синтаксис не совсем такой, как в Perl.Например, оператор группировки - {}, а в Perl - (), и он не имеет {n} (соответствует ровно n раз), как в синтаксисе Perl

Также обратите внимание, что буквальная точка должна быть определена с помощью \., и это хорошая идея - использовать только один \.EXE после всех сгруппированных альтернатив.

...