最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt中使用正則表達式來提取字符串等操作指南

 更新時間:2025年09月05日 11:28:16   作者:OldField-Tian  
在Qt中使用正則表達式提取字符串是一個常見的任務,下面這篇文章主要介紹了Qt中使用正則表達式來提取字符串等操作的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

在 C++ Qt 項目中,你可以使用 QRegularExpression 類結合正則表達式來匹配 QString 中的內容。下面介紹如何使用正則表達式進行匹配、提取和替換操作。

一、基本用法:創(chuàng)建正則表達式對象

#include <QRegularExpression>

QString m_buffer = "Hello, 2025! Today is 2025-05-30.";

// 創(chuàng)建正則表達式對象(匹配四位數字)
QRegularExpression re("\\d{4}");

二、常見匹配操作

1. 檢查是否匹配

// 檢查整個字符串是否匹配
bool isExactMatch = re.match(m_buffer).hasMatch();

// 檢查字符串中是否包含匹配項
bool containsMatch = m_buffer.contains(re);

2. 查找第一個匹配項

QRegularExpressionMatch match = re.match(m_buffer);
if (match.hasMatch()) {
    QString matchedText = match.captured(0); // 整個匹配的文本
    int pos = match.capturedStart(0);        // 匹配的起始位置
    int length = match.capturedLength(0);    // 匹配的長度
}

3. 查找所有匹配項

QRegularExpressionMatchIterator it = re.globalMatch(m_buffer);
while (it.hasNext()) {
    QRegularExpressionMatch match = it.next();
    QString matchedText = match.captured(0);
    // 處理每個匹配項
}

4. 使用捕獲組提取子字符串

// 匹配日期格式:YYYY-MM-DD
QRegularExpression dateRe("(\\d{4})-(\\d{2})-(\\d{2})");
QRegularExpressionMatch match = dateRe.match(m_buffer);

if (match.hasMatch()) {
    QString fullDate = match.captured(0); // 完整匹配:2025-05-30
    QString year = match.captured(1);     // 第一組:2025
    QString month = match.captured(2);    // 第二組:05
    QString day = match.captured(3);      // 第三組:30
}

三、高級用法

1. 設置匹配選項

// 不區(qū)分大小寫
QRegularExpression re("hello", QRegularExpression::CaseInsensitiveOption);

// 多行模式(^ 和 $ 匹配行的開始和結束)
QRegularExpression multiLineRe("^\\d+", QRegularExpression::MultilineOption);

2. 替換匹配內容

// 將所有數字替換為 "X"
QString result = m_buffer.replace(re, "X");
// 結果:"Hello, X! Today is X-X-X."

// 使用捕獲組替換
QString replaced = m_buffer.replace(dateRe, "\\1年\\2月\\3日");
// 結果:"Hello, 2025! Today is 2025年05月30日."

3. 分割字符串

// 按逗號或空格分割字符串
QRegularExpression splitRe("[,\\s]+");
QStringList parts = m_buffer.split(splitRe);

四、在你的項目中應用正則表達式

假設你需要從 dbus-monitor 的輸出中提取 time= 后面的時間戳:

QString m_buffer = "method call time=1748411906.768461 sender=:1.100 ...";

// 正則表達式:匹配 "time=" 后跟數字和小數點
QRegularExpression timeRe("time=(\\d+\\.\\d+)");
QRegularExpressionMatch match = timeRe.match(m_buffer);

if (match.hasMatch()) {
    QString timestampStr = match.captured(1); // 提取時間戳:1748411906.768461
    double timestamp = timestampStr.toDouble();
}

五、正則表達式語法參考

符號含義示例
^匹配字符串開始^hello
$匹配字符串結束world$
.匹配任意字符(除換行符)h.t
*匹配前一個字符 0 次或多次he*llo
+匹配前一個字符 1 次或多次he+llo
?匹配前一個字符 0 次或 1 次colou?r
{n}匹配前一個字符 n 次a{3}
{n,}匹配前一個字符至少 n 次a{3,}
{n,m}匹配前一個字符 n 到 m 次a{3,5}
[ ]匹配方括號中的任意字符[aeiou]
[^ ]匹配不在方括號中的任意字符[^aeiou]
( )分組,用于捕獲子字符串(\\d{2})-(\\d{2})
|或操作cat|dog
\d匹配數字(等價于 [0-9]\d{3}
\D匹配非數字(等價于 [^0-9]\D+
\s匹配空白字符\s+
\S匹配非空白字符\S+
\w匹配單詞字符(字母、數字、下劃線)\w+
\W匹配非單詞字符\W+

六、性能注意事項

  1. 預編譯正則表達式:對于頻繁使用的正則表達式,建議創(chuàng)建為類成員變量,避免重復編譯。
  2. 使用簡單模式:復雜的正則表達式會顯著影響性能,盡量簡化。
  3. 檢查匹配位置:使用 match.capturedStart() 確定匹配位置,避免重復查找。

總結 

到此這篇關于Qt中使用正則表達式來提取字符串等操作的文章就介紹到這了,更多相關Qt正則表達式提取字符串內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 深入淺析c/c++ 中的static關鍵字

    深入淺析c/c++ 中的static關鍵字

    C++的static有兩種用法:面向過程程序設計中的static和面向對象程序設計中的static。本文重點給大家介紹c/c++ 中的static關鍵字,感興趣的朋友跟隨小編一起看看吧
    2018-08-08
  • C++實現(xiàn)路口交通燈模擬系統(tǒng)

    C++實現(xiàn)路口交通燈模擬系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)路口交通燈模擬系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • QT5中使用SQLite的實現(xiàn)方法

    QT5中使用SQLite的實現(xiàn)方法

    SQLite是一款開源輕量級的數據庫軟件,本文主要介紹了QT5中使用SQLite的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Qt 實現(xiàn)鋼筆畫線效果示例及詳細原理

    Qt 實現(xiàn)鋼筆畫線效果示例及詳細原理

    這篇文章主要介紹了Qt 實現(xiàn)鋼筆畫線效果示例及詳細原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • C++ ffmpeg硬件解碼的實現(xiàn)方法

    C++ ffmpeg硬件解碼的實現(xiàn)方法

    這篇文章主要介紹了C++ ffmpeg硬件解碼的實現(xiàn),對FFmpeg多媒體解決方案中的視頻編解碼流程進行研究。為嵌入式多媒體開發(fā)提供參考,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • C++編譯/編輯器對OIer的必要功能(推薦)

    C++編譯/編輯器對OIer的必要功能(推薦)

    這篇文章主要介紹了C++編譯/編輯器對OIer的必要功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • C++深入講解類與對象之OOP面向對象編程與封裝

    C++深入講解類與對象之OOP面向對象編程與封裝

    學習過C語言的小伙伴知道:C語言是面向過程的,關注的是過程,分析出求解問題的步驟,通過函數調用逐步解決問題,接下來讓我們詳細的了解
    2022-05-05
  • 詳解C語言隨機數設置的三種方式(保姆級教程)

    詳解C語言隨機數設置的三種方式(保姆級教程)

    本篇文章將為大家介紹在C語言中設置隨機數的三大方法的使用,文中的示例代碼講解詳細,對我們學習C語言有一定的幫助,需要的可以參考一下
    2022-11-11
  • QString和char以及string之間的賦值詳解

    QString和char以及string之間的賦值詳解

    QString 、string 、char* 之間免不了相互賦值。下面是自己的總結。需要的朋友可以過來參考下
    2013-10-10
  • C++使用宏實現(xiàn)動態(tài)庫加載

    C++使用宏實現(xiàn)動態(tài)庫加載

    開發(fā)的時候,有些項目不能靜態(tài)鏈接動態(tài)庫,需要程序運行時加載動態(tài)庫。本文將使用宏來實現(xiàn)動態(tài)庫的加載,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12

最新評論

云南省| 浮山县| 滕州市| 平定县| 汨罗市| 财经| 漾濞| 东乌| 太白县| 乃东县| 额尔古纳市| 大邑县| 南郑县| 花垣县| 海南省| 滁州市| 五大连池市| 二连浩特市| 峨山| 资源县| 江津市| 项城市| 来宾市| 洞口县| 雷波县| 和林格尔县| 桃园县| 合作市| 屯昌县| 大港区| 芦溪县| 镇平县| 贡山| 安平县| 特克斯县| 乌拉特后旗| 图片| 渭源县| 龙州县| 广东省| 汝城县|