1. 程式人生 > >qt中的正則表示式QRegExp使用大全以及匹配中括號[]方法大全

qt中的正則表示式QRegExp使用大全以及匹配中括號[]方法大全

Qt的SDK裡包含一個很幫的GUI工具,可以方便我們進行這類轉換並測試你的表示式。可以按照如下的方式開啟:“開始”->“程式”->“Qt SDK by Nokia v2010.02.1 (open source)”->“QtDemo”->“Tools”->“RegularExpression”可以選擇“launch”啟動程式,亦可以“Documentation”檢視原始檔。

QRegExp::QRegExp ( const QRegExp & rx )//建立一個正則表示式,該表示式是rx的複製版

如程式中建立的匹配節點重啟的正則表示式QRegExp  regexp("TaskCTLL");就是以TaskCTLL為表示式進行匹配。

QRegExp::QRegExp ( const QString & patternQt::CaseSensitivity cs = Qt::CaseSensitive, PatternSyntax syntax = RegExp )//根據給定的模式串(pattern string)建立正則表示式物件,模式串必須以萬用字元(wildcard)的形式給出

如程式中建立的匹配第一父節點的餓正則表示式QRegExp  regexpparent("parent\\[0\\]\\s+\\-{0,1}(\\d+)\\b");

int QRegExp::indexIn ( const QString
 & str, int offset = 0, CaretMode caretMode = CaretAtZero ) const//企圖從位置偏移為零(預設值)出找到一個匹配的字元處str,返回第一個匹配點的位置position,如果沒有匹配則返回-1

程式中只需要匹配一次(文字檔案中每一行只有一個不重複的str),只要匹配成功返回值不是-1,就對資訊進行提取儲存

Qt裡的正則表示式和C++裡面的有些差別,例如\\.表示.   \\d表示d

程式例項:

匹配時鐘跳變   

2011/06/27 22:05:42.011    parent[1]  -1

2011/06/27 22:05:42.011    Local time  2d5820d

":(\\d+)\\.(\\d+)\\s+(\\w*\\s*\\w*\\s*\\d*\\,\\s*)*(\\w*\\s*)*(parent\\[[01]\\]\\s+\\-{0,1}\\d+)*(\\w*\\d*\\.\\d*\\w*\\s*\\d*)*Local\\s+time"

匹配第一父節點

2011/06/27 22:05:42.011    parent[0]  6003

"parent\\[0\\]\\s+\\-{0,1}(\\d+)\\b"

匹配節點號

2011/06/27 22:26:30.090    mac neigh 0,  addr 100

"mac\\s+neigh\\s+0\\,\\s+addr\\s+(\\d+)\\b"

根節點收到資料

2011/06/27 22:07:45.058    ROOT receive data origin 52 100

"ROOT\\s+receive\\s+\\dada\\s+\\origin\\s+(\\d+)\\s+(\\d+)\\b"

常用正則表示式

表示式 說明
\r, \n 代表回車和換行符
\t 製表符
\\ 代表 "\" 本身
\^ 匹配 ^ 符號本身
\$ 匹配 $ 符號本身
元字元 說明
. 匹配除了換行符以外的任意字元
\w 匹配字母、數字、下劃線、漢字
\s 匹配任意的空白符
\b 單詞的開始或結尾
\~ 匹配字串的開始
$ 匹配字串的結束

如:

\ba\w*\b :匹配以字母a開頭的單詞——先是某個單詞開始處(\b),然後是字母a,然後是任意數量的字母或數字(\w*),最後是單詞結束處(\b)。

\d+ :匹配1個或更多連續的數字。這裡的+是和*類似的元字元,不同的是*匹配重複任意次(可能是0次),而+則匹配重複1次或更多次。

\b\w{6}\b: 匹配剛好6個字元的單詞。

表示式 說明
[ ] 包含一系列字元
[^ ] 包含之外一系列字元

[[email protected]]: 匹配 "a" 或 "b" 或 "5" 或 "@"

[^abc]: 包含abc之外的任意字元

[f-k]: f-k之間的任意字元

備註:

在正則表示式中,Qt裡面前後中括號 都 屬於特殊字元,要匹配它,需要轉義,即加上 \

    QRegExp rx("\\[\\]");   // 輸出true
//    QRegExp rx("\\[]");     // 輸出false,如果用isValid檢視可以得知這個表示式是不合法的。
    QString str = "[]";
    if (rx.exactMatch(str))
    {
        qDebug() << "True" << endl;
    }
    else
    {
        qDebug() << "False" << endl;
    }

而且看起來還需要兩次轉義,第一次\\代表對字串的轉義得到\,然後在QRegExp中才有\[\],繼續去轉義。除錯程式碼可以看到:

備註備註:中括號擴充套件,在JS中,前中括號為特殊字元,後中括號不屬於特殊字元,所以後中括號不需要\.而且和瀏覽器也有關係。

資料:正則表示式中的特殊字元(需要轉義) 

^ 匹配輸入字串的開始位置,除非在方括號表示式中使用,此時它表示不接受該字元集合。要匹配 ^ 字元本身,請使用 \^。 

$ 匹配輸入字串的結尾位置。如果設定了 RegExp 物件的 Multiline 屬性,則 $ 也匹配 '\n''\r'。要匹配 $ 字元本身,請使用 \$。 

. 匹配除換行符 \n 之外的任何單字元。要匹配 .,請使用 \。 

\ 將下一個字元標記為或特殊字元、或原義字元、或後向引用、或八進位制轉義符。例如, 'n'匹配字元'n''\n'匹配換行符。序列'\\'匹配"\",而 '\(' 則匹配 "("。 

| 指明兩項之間的一個選擇。要匹配 |,請使用 \|。 

{ 標記限定符表示式的開始。要匹配 {,請使用 \{。 

[ 標記一箇中括號表示式的開始。要匹配 [,請使用 \[。 

( 和 ) 標記一個子表示式的開始和結束位置。子表示式可以獲取供以後使用。要匹配這些字元,請使用 \( 和 \)。 

* 匹配前面的子表示式零次或多次。要匹配 * 字元,請使用 \*。 

+ 匹配前面的子表示式一次或多次。要匹配 + 字元,請使用 \+。 

? 匹配前面的子表示式零次或一次,或指明一個非貪婪限定符。要匹配 ? 字元,請使用 \?。 

相關推薦

QT---之表示式QRegExp詳解

引言     正則表示式(regular expression)就是用一個“字串”來描述一個特徵,然後去驗證另一個“字串”是否符合這個特徵。比如 表示式“ab+” 描述的特徵是“一個 'a' 和 任意個 'b' ”,那麼 'ab', 'abb', 'abbbbbbbbb

表示式簡單介紹以及JavaScript的使用

什麼是正則 在常見的字串檢索或替換中,我們需要提供一種模式表示檢索或替換的規則。正則表示式使用單個字串來描述、匹配一系列符合某個句法規則的字串。 這裡只講解簡單的內容。 簡單的正則 /abc/ 匹配包含 “abc” 的字串,如 “abcd”

qt表示式QRegExp使用大全以及匹配括號[]方法大全

Qt的SDK裡包含一個很幫的GUI工具,可以方便我們進行這類轉換並測試你的表示式。可以按照如下的方式開啟:“開始”->“程式”->“Qt SDK by Nokia v2010.02.1 (open source)”->“QtDemo”->“To

QT表示式從tableView篩選出某一日期範圍內的資料

QDate date1,date2; date1=ui->dateEdit_2->date();//提取開始時間 date2=ui->dateEdit_3->date();//提取結束時間 data_filter->

Scala表示式以及與模式匹配結合

正則表示式 //"""原生表達 val regex="""([0-9]+)([a-z]+)""".r val numPattern="[0-9]+".r val numberPattern="""\s+[0-9]+\s+""

關於QT表示式QRegExp的細節問題

想要匹配格式為“YYYY.MM.DD HH:mm:ss.zzz”的時間,關注點是符號“.”的使用,因為正則表示式的語法中“.”正好是特殊符號,代表可以匹配任何非\n字元。而我們的時間格式中“.”就是代

Qt表示式的使用

今天的工作中,遇到一個需求,就是介面的一個對話方塊中需要填入需求的字串,因為如果填的字串是隨意的內容的話,下載到下位機上可能會使得下位機崩潰。因此我研究了一下Qt中的QLineEdit控制元件中使用正則表示式。首先查了一些文件,並且對此進行設定,發現只要新建一個

php 表示式詳解

概述 正則表示式是一種描述字串結果的語法規則,是一個特定的格式化模式,可以匹配、替換、擷取匹配的字串。常用的語言基本上都有正則表示式,如JavaScript、java等。其實,只有瞭解一種語言的正則使用,其他語言的正則使用起來,就相對簡單些。文字主要圍繞解決下面問題展開。 有哪些常用的

Python表示式re.match的用法

re.match(pattern, string, flags) 第一個引數是正則表示式,如果匹配成功,則返回一個Match,否則返回一個None; 第二個引數表示要匹配的字串; 第三個引數是標緻位,用於控制正則表示式的匹配方式,如:是否區分大小寫,多行匹配等等。 需要特別注意的是,這個方法並不是完

WPF表示式的部分應用

無論在哪一種語言中,正則表示式在一定程度上都可以簡化程式碼程式設計。以下為在WPF中的部分應用。 如var sql = new System.Text.RegularExpressions.Regex("[\\r\\n]").Replace(str, " "); 表示對str字串中匹配換行符

Python表示式常用函式sub,search,findall,split等使用

1.原生字串r python中字串前面加上 r 表示原生字串,不會轉義。與大多數程式語言相同,正則表示式裡使用"\"作為轉義字元,這就可能造成反斜槓困擾。假如你需要匹配文字中的字元"\",那麼使用程式語言表示的正則表示式裡將需要4個反斜槓"\\":前兩個和後兩個分別用於在程式語言裡轉義成反斜

Python表示式對單個字元,多個字元,匹配邊界等使用

         Regular Expression,正則表示式,又稱正規表示式、正規表示法、正則表示式、規則表示式、常規表示法(英語:Regular Expression,在程式碼中常簡寫為regex、regexp或RE),是電腦科學的一個概

js表示式test()方法

正則表示式即描述字串規則的表示式 /pattern/attrs          /規則/屬性 new RegExp(pattern,attrs) regexObj.test(str)方法:測試正則表示式與指定字串是否匹

java表示式的瞭解與實踐記錄

Pattern pattern = Pattern.compile("^\\S+/q/"); Matcher matcher = pattern.matcher(resultString); String qrcode=""; while(matcher.find()){ String path

Java表示式相關類Pattern和Matcher的使用

在Java中,java.util.regex包定義了正則表示式使用到的相關類,其中最主要的兩個類為:Pattern、Matcher:   Pattern 編譯正則表示式後建立一個匹配模式;   Matcher 使用Pattern例項提供的正則表示式對目標字串進行匹

Python 用表示式一次替換文章所有特殊符號,如“-,$()#+&*”之類

一個簡單的正則表示式,可能會起大作用。比如說字符集就是這樣。一篇文章如果有各種亂碼,就可以用這種方法去除。如去除“-,$()#+&*”之類符號是很方便的。按照查詢、分割、替換的套路再做一做這樣的練習。今天晚了,後續還要操作檔案來完善這一點。 import re

python表示式1

1.模式語言 1)任何字元只與其本身匹配 2)"."匹配任意字元 3)"*" 表示其前面那個字元可匹配0個或任意多個相同字元 4)"^"只匹配目標串的開頭 5)"$"只匹配目標串的結尾 2.原始字串 定義:在常規字串前加上r或者R字首. r'd:\test\1.t

Java 表示式

字元類: [abc] a、b 或 c [^abc] 任何字元,除了abc [a-zA-Z] a 到 z 或 A 到 Z ,兩頭的字母包括在內 [0-9] 0到9 的字元都包括 預定義字元類: . 任何字元 \d 數字:[0-9] 示例:判斷手機號的規則: String regex = “

python表示式的使用

正則表示式 python中需要使用正則表示式對字串進行匹配的時候,需要匯入re模組 #coding=utf-8 # 匯入re模組 import re # 使用match方法進行匹配操作 result = re.match(正

Lua表示式的使用整理

在Lua中使用正則表示式進行模式匹配的string庫函式有這四個: string.find(str, pattern[, init[, plain]]) string.gsub(str, patte