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 & pattern, Qt::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