PDA

View Full Version : Two Word QRegExp Help



mabeeh
13th May 2008, 13:16
I'm having a problem setting up a two word QRegExp. In Example #1 I'm able to pick out USER from str1. However, in Example #2 I'm not able to pick out USER ACTION:
What am I doing wrong? Thanks!

EXAMPLE #1:

QString str = "User Action:";
QString str1 = "USER ACTION:";

QRegExp reg ("^\\bUSER\\b");

int ireturn = reg.indexIn(str, 0);
std::cout << ireturn << std::endl;
ireturn = reg.indexIn(str1, 0);
std::cout << ireturn << std::endl;
QString captured = reg.cap( 0 ); // captured == "letter"
std::cout << captured.toStdString() << std::endl;


EXAMPLE #2:

QString str = "User Action:";
QString str1 = "USER ACTION:";

QRegExp reg ("^\\bUSER\\b\\s\\bACTION:\\b");

int ireturn = reg.indexIn(str, 0);
std::cout << ireturn << std::endl;
ireturn = reg.indexIn(str1, 0);
std::cout << ireturn << std::endl;
QString captured = reg.cap( 0 ); // captured == "letter"
std::cout << captured.toStdString() << std::endl;

jpn
13th May 2008, 13:51
Did you read QRegExp::cap() docs?

mabeeh
13th May 2008, 14:18
Thanks for the help! But I have one more question...How do I capture the entire string? I need to be able to capture the entire line. So far I've got it to match the key words I'm looking for. Thanks!


QString str = "User Action:";
QString str1 = "USER ACTION: do this";
QString str2 = "USER VERIFY: DO SOMETHING ELSE";
QString str3 = "STEP NUMBER: 1";

QRegExp reg ("^((\\bUSER\\b)(\\s)(\\bACTION:\\b?))|((\\bUSER\\b) (\\s)(\\bVERIFY:\\b?))|((\\bSTEP\\b)(\\s)(\\bNUMBE R:\\b?))");

int ireturn = reg.indexIn(str, 0);
std::cout << ireturn << std::endl;
ireturn = reg.indexIn(str1, 0);
std::cout << ireturn << std::endl;
QString captured = reg.cap( 0 ); // captured == "letter"
std::cout << captured.toStdString() << std::endl;

ireturn = reg.indexIn(str2, 0);
std::cout << ireturn << std::endl;
captured = reg.cap( 0 ); // captured == "letter"
std::cout << captured.toStdString() << std::endl;

ireturn = reg.indexIn(str3, 0);
std::cout << ireturn << std::endl;
captured = reg.cap( 0 ); // captured == "letter"
std::cout << captured.toStdString() << std::endl;

Output produced:

-1
0
USER ACTION:
0
USER VERIFY:
0
STEP NUMBER:

mabeeh
13th May 2008, 14:29
I got it...and it captures the entire string. Here's the code and the output.


QString str = "User Action:";
QString str1 = "USER ACTION: do this";
QString str2 = "USER VERIFY: DO SOMETHING ELSE";
QString str3 = "STEP NUMBER: 1";

QRegExp reg ("^((\\bUSER\\b)(\\s)(\\bACTION:\\b?))(.*$)|((\\bUSE R\\b)(\\s)(\\bVERIFY:\\b?))(.*$)|((\\bSTEP\\b)(\\s )(\\bNUMBER:\\b?))(.*$)");

int ireturn = reg.indexIn(str, 0);
std::cout << ireturn << std::endl;
ireturn = reg.indexIn(str1, 0);
std::cout << ireturn << std::endl;
QString captured = reg.cap( 0 ); // captured == "letter"
std::cout << captured.toStdString() << std::endl;

ireturn = reg.indexIn(str2, 0);
std::cout << ireturn << std::endl;
captured = reg.cap( 0 ); // captured == "letter"
std::cout << captured.toStdString() << std::endl;

ireturn = reg.indexIn(str3, 0);
std::cout << ireturn << std::endl;
captured = reg.cap( 0 ); // captured == "letter"
std::cout << captured.toStdString() << std::endl;

Output Produced:

-1
0
USER ACTION: do this
0
USER VERIFY: DO SOMETHING ELSE
0
STEP NUMBER: 1