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

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

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

前言

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

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

#include <QRegularExpression>

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

// 創(chuàng)建正則表達(dá)式對象(匹配四位數(shù)字)
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. 設(shè)置匹配選項

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

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

2. 替換匹配內(nèi)容

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

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

3. 分割字符串

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

四、在你的項目中應(yīng)用正則表達(dá)式

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

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

// 正則表達(dá)式:匹配 "time=" 后跟數(shù)字和小數(shù)點
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();
}

五、正則表達(dá)式語法參考

符號含義示例
^匹配字符串開始^hello
$匹配字符串結(jié)束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匹配數(shù)字(等價于 [0-9]\d{3}
\D匹配非數(shù)字(等價于 [^0-9]\D+
\s匹配空白字符\s+
\S匹配非空白字符\S+
\w匹配單詞字符(字母、數(shù)字、下劃線)\w+
\W匹配非單詞字符\W+

六、性能注意事項

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

總結(jié) 

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

相關(guān)文章

  • 深入淺析c/c++ 中的static關(guān)鍵字

    深入淺析c/c++ 中的static關(guān)鍵字

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

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

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

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

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

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

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

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

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

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

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

    C++深入講解類與對象之OOP面向?qū)ο缶幊膛c封裝

    學(xué)習(xí)過C語言的小伙伴知道:C語言是面向過程的,關(guān)注的是過程,分析出求解問題的步驟,通過函數(shù)調(diào)用逐步解決問題,接下來讓我們詳細(xì)的了解
    2022-05-05
  • 詳解C語言隨機(jī)數(shù)設(shè)置的三種方式(保姆級教程)

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

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

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

    QString 、string 、char* 之間免不了相互賦值。下面是自己的總結(jié)。需要的朋友可以過來參考下
    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

最新評論

钟山县| 哈巴河县| 和龙市| 云林县| 南部县| 扎赉特旗| 北海市| 赫章县| 商洛市| 塘沽区| 馆陶县| 康平县| 白朗县| 临西县| 泗水县| 丰城市| 台东县| 镇江市| 平顶山市| 靖安县| 武乡县| 咸阳市| 博乐市| 饶平县| 武宁县| 巫山县| 图木舒克市| 蒲城县| 南和县| 驻马店市| 鄯善县| 广州市| 大名县| 长宁区| 井冈山市| 饶平县| 增城市| 建始县| 阿拉善右旗| 桃源县| 张家川|