Russian Qt Forum

Qt => Общие вопросы => Тема начата: Yegor от Июнь 26, 2015, 12:16



Название: [РЕШЕНО] Помогите с регулярными выражениями
Отправлено: Yegor от Июнь 26, 2015, 12:16
Здравствуйте!

Мне нужно проверить строку на соответствие, с помощью регулярных выражений. Строка - имя жесткого диска, который может иметь вид, например:

  • \\?\PhysicalDrive0
  • \\?\PhysicalDrive1
  • \\?\PhysicalDrive2

и т.д.

То есть имена могут отличаться только числом в самом конце строки. Мне нужно составить шаблон для такой проверки.
Для этого использую класс QRegExp. Для него устанавливаю язык регулярных выражений - Perl:

QRegExp regExp;
regExp.setPatternSyntax(QRegExp::RegExp2);


И составляю шаблон для проверки:

const QString strRegExpPattern = "^\\\\?\\PhysicalDrive([\\d])+$";

Но такой шаблон не срабатывает. А срабатывает только при условии, если убрать из него символ '^'. А меня это не устраивает, мне ведь нужно, чтобы левая часть строки шаблона находилась в самом начале проверяемой строки.

Подскажите, пожалуйста, что неправильно в шаблоне:

^\\\\?\\PhysicalDrive([\\d])+$

для строк типа \\?\PhysicalDrive0

Ну, или если не выходит, то подскажите шаблон на другом языке, который поддерживает QRegExp


Название: Re: Помогите с регулярными выражениями
Отправлено: Johnik от Июнь 26, 2015, 13:07
У вас мало экранирующих косых черт  ;) . Вот код:
Код
C++ (Qt)
QString s1 = "\\\\?\\PhysicalDrive0";
QString s2 = "\\\\?\\PhysicalDrive1";
QString s3 = "\\\\?\\PhysicalDrive2";
 
QRegExp r("^\\\\\\\\\\?\\\\PhysicalDrive([\\d])+$", Qt::CaseSensitive, QRegExp::RegExp2);
qDebug() << r.exactMatch(s1);
qDebug() << r.capturedTexts();
qDebug() << r.exactMatch(s2);
qDebug() << r.capturedTexts();
qDebug() << r.exactMatch(s3);
qDebug() << r.capturedTexts();
 



Название: Re: [РЕШЕНО] Помогите с регулярными выражениями
Отправлено: Yegor от Июнь 26, 2015, 13:46
Помогло. Спасибо большое!