QRegExp
QRegExp
qt正则
构造函数
- QRegExp(const QString &pattern, Qt::CaseSensitivity cs = Qt::CaseSensitive, QRegExp::PatternSyntax syntax = RegExp)
cs指定是否区分大小写。默认区分大小写,
syntax 指定匹配模式, 有以下几种匹配模式
| 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) + ")");
总结
- 上一篇: 算法练习之leetcode两数相加(1)
- 下一篇: 面试day1