给我一个例子, QT 正则匹配后,提取子字符串
时间: 2024-06-07 15:05:21 浏览: 15
好的,关于 QT 正则匹配后,提取子字符串的例子,您可以参考以下代码:
QString str = "Hello, world! This is a sample string.";
QRegExp rx("(\\bw.*?\\b)");
int pos = 0;
while ((pos = rx.indexIn(str, pos)) != -1) {
QString word = rx.cap(1);
qDebug() << "Matched word:" << word;
pos += rx.matchedLength();
}
这个例子使用了 QT 的 QRegExp 类来匹配字符串中以 w 开头的单词,并将匹配的单词提取出来输出。您可以通过修改正则表达式来匹配其它的子字符串。
相关问题
在qt中使用正则表达式取出一字符串中括号里面的子字符串
假设我们要从一个字符串中取出括号里面的子字符串,可以使用正则表达式和QRegExp类来实现。具体步骤如下:
1. 定义正则表达式
首先,我们需要定义一个正则表达式来匹配括号里面的内容。在本例中,我们可以使用`\([^)]*\)`这个正则表达式来匹配一个以左括号开始、右括号结束的子字符串。其中,`\(`和`\)`表示匹配左右括号,`[^)]*`表示匹配任意数量的非右括号字符。
2. 创建QRegExp对象
接着,我们需要创建一个QRegExp对象,并将上面定义的正则表达式传入构造函数中:
```C++
QString str = "Hello (world)!";
QRegExp rx("\\([^)]*\\)");
```
在上面的代码中,我们将定义的正则表达式作为参数传给了QRegExp的构造函数。
3. 进行匹配
现在,我们可以使用QRegExp对象进行匹配了。可以使用`indexIn()`函数来查找第一个匹配项的位置,然后使用`capturedTexts()`函数来获取所有匹配项的子字符串列表:
```C++
if (rx.indexIn(str) != -1) {
QStringList matches = rx.capturedTexts();
qDebug() << matches;
}
```
在上面的代码中,`indexIn()`函数返回的是第一个匹配项的位置。如果找到了匹配项,则返回其位置;否则返回-1。如果找到了匹配项,则可以使用`capturedTexts()`函数来获取所有匹配项的子字符串列表。其中,第一个元素是整个匹配项的子字符串,后面的元素是每个括号内的子字符串。
完整的代码如下:
```C++
QString str = "Hello (world)!";
QRegExp rx("\\([^)]*\\)");
if (rx.indexIn(str) != -1) {
QStringList matches = rx.capturedTexts();
qDebug() << matches;
}
```
输出结果为:
```
("(world)", "world")
```
其中,第一个元素是整个匹配项的子字符串`"(world)"`,第二个元素是括号内的子字符串`"world"`。
给我一个例子,让QT对文件内容进行正则搜索
好的,您可以使用QRegularExpression类来进行正则表达式的搜索。以下是一个例子,可以在Qt中搜索某个文本文件中的所有email地址:
```
QStringList emailList;
QFile file("filePath");
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream in(&file);
while(!in.atEnd())
{
QString line = in.readLine();
QRegularExpression emailRegex("\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b");
QRegularExpressionMatchIterator i = emailRegex.globalMatch(line);
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();
QString email = match.captured(0);
emailList.append(email);
}
}
file.close();
}
```
以上代码读取指定文件中的每一行,使用正则表达式搜索email地址,并将所有匹配结果存储在QStringList中。您可以根据需要修改正则表达式,以匹配不同的文本内容。