QRegExp
qt正则
构造函数
QRegExp(const QString &pattern, Qt::CaseSensitivity cs = Qt::CaseSensitive, QRegExp::PatternSyntax syntax = RegExp)
cs指定是否区分大小写。默认区分大小写,
syntax 指定匹配模式, 有以下几种匹配模式
QRegExp::PatternSyntax | 描述 |
QRegExp::RegExp | 类似Perl的模式匹配语法 |
QRegExp::RegExp2 | 类似于RegExp,但带有贪婪的量词。 (在Qt 4.2中引入。) |
QRegExp::Wildcard | 这提供了一种简单的模式匹配语法,类似于shell(命令解释器)用于“文件遍历”的语法 |
QRegExp::WildcardUnix | 这类似于通配符,但具有Unix Shell的行为。 通配符可以使用字符“ \”进行转义。 |
QRegExp::FixedString | 模式是固定的字符串。 这等效于在字符串上使用RegExp模式,在该字符串中,所有所有元字符都使用escape()进行转义。 |
QRegExp::W3CXmlSchema11 | 模式是W3C XML Schema 1.1规范定义的正则表达式。 |
C ++编译器将字符串中的反斜杠转换。 要在正则表达式中包含\,请输入两次,即\\。 要匹配反斜杠字符本身,请输入四次,即\\\\。
常用的正则匹配符
\d | 匹配一个数字 |
\D | 匹配一个非数字。 |
\s | 匹配空白字符 |
\S | 匹配非空白字符 |
\w | 匹配单词字符(字母数字下划线“ _”或标记)。 |
\W | 匹配非单词字符。 |
^ | 尖号表示字符串的开头。 如果要匹配文字^,则必须通过写\\ ^对其进行转义。 |
$ | 表示字符串的结尾 |
\b | 单词边界。 |
\B | 非单词边界。 |
(?=E) | 积极向前。 如果表达式此时在regexp中匹配,则此断言为true。 例如,const(?= \ s + char)每次与“ const”匹配时都跟“ char”,例如“ static const char *”。 (与const \ s + char比较,后者匹配“ static const char *”。) |
(?!E) | 负前瞻。 例如,const(?!\ s + char)与'const'匹配,除非后面跟有'char'。 |
void QRegExp::setMinimal(bool minimal)
启用或禁用最小匹配。 如果minimum为false,则匹配为贪婪
bool QRegExp::isValid() const
如果正则表达式有效,则返回true;否则,返回true。 否则返回false。 无效的正则表达式永远不会匹配。
void QRegExp::setPattern(const QString &pattern)
将模式字符串设置为pattern。 区分大小写,通配符和最小匹配选项不变。
QString QRegExp::cap(int nth = 0) const
返回第n个子表达式捕获的文本。 整个匹配的索引为0,带括号的子表达式的索引从1开始(不包括括号)
QRegExp rxlen("(\\d+)(?:\\s*)(cm|inch)");
int pos = rxlen.indexIn("Length: 189cm");
if (pos > -1) {
QString value = rxlen.cap(1); // "189"
QString unit = rxlen.cap(2); // "cm"
// ...
}
int QRegExp::captureCount() const
返回正则表达式中包含的捕获数。
QStringList QRegExp::capturedTexts() const
返回捕获的文本字符串的列表。列表中的第一个字符串是整个匹配的字符串。 每个后续列表元素都包含一个与正则表达式的(捕获)子表达式匹配的字符串。
QRegExp rx("(\\d+)(\\s*)(cm|inch(es)?)");
int pos = rx.indexIn("Length: 36 inches");
QStringList list = rx.capturedTexts();
// list is now ("36 inches", "36", " ", "inches", "es")
int QRegExp::matchedLength() const
返回最后匹配的字符串的长度;如果不匹配,则返回-1。
int QRegExp::indexIn(const QString &str, int offset = 0, QRegExp::CaretMode caretMode = CaretAtZero) const
尝试从位置偏移量(默认为0)中找到str中的匹配项。 如果offset为-1,则搜索从最后一个字符开始
QRegExp rx("(\\d+)");
QString str = "Offsets: 12 14 99 231 7";
QStringList list;
int pos = 0;
while ((pos = rx.indexIn(str, pos)) != -1) {
list << rx.cap(1);
pos += rx.matchedLength();
} // list: ["12", "14", "99", "231", "7"]
int QRegExp::pos(int nth = 0) const
返回捕获的文本在搜索字符串中的位置。
QRegExp rx("/([a-z]+)/([a-z]+)");
rx.indexIn("Output /dev/null"); // returns 7 (position of /dev/null)
rx.pos(0); // returns 7 (position of /dev/null)
rx.pos(1); // returns 8 (position of dev)
rx.pos(2); // returns 12 (position of null)
[static] QString QRegExp::escape(const QString &str)
返回带有反斜杠转义的每个正则表达式特殊字符的字符串str。 特殊字符为$,(,),*,+,。,?,[、、],^,{,|。 和 }。
s1 = QRegExp::escape("bingo"); // s1 == "bingo"
s2 = QRegExp::escape("f(x)"); // s2 == "f\\(x\\)"
//此函数对于动态构造正则表达式模式很有用:
QRegExp rx("(" + QRegExp::escape(name) +
"|" + QRegExp::escape(alias) + ")");
————————————————
版权声明:本文为CSDN博主「weixin_43117674」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43117674/article/details/116244502