VC++正則表達(dá)式測(cè)試器是一個(gè)主要適用于C++編程環(huán)境,正則表達(dá)式是一種對(duì)字符進(jìn)行模糊匹配的一個(gè)公式。在數(shù)據(jù)有效性驗(yàn)證,查找,替換文本中都可以使用正則表達(dá)式 。
當(dāng)然其它語(yǔ)言環(huán)境也可以用,不過(guò)有時(shí)候會(huì)不準(zhǔn)確,因?yàn)榘l(fā)現(xiàn).NET中有許多的正則表達(dá)式調(diào)試器,但卻沒(méi)有發(fā)現(xiàn)適合于C++的,所以自己就用C++編寫(xiě)了一個(gè)正則測(cè)試小工具,調(diào)用了pcre.dll,測(cè)試器運(yùn)行效果請(qǐng)參見(jiàn)截圖。
VC++中如何使用正則表達(dá)式:
VC2010中可以很方便的使用正則表達(dá)式,而無(wú)需使用第三方庫(kù):
#include <regex>
using namespace std;
加個(gè)頭文件
string str="要匹配的字符串";
const regex szReg1( "device\\x20+([^\\n\\20]");
smatch results;
std::string::const_iterator it=str.begin();//取頭 std::string::const_iterator end=str.end();//取尾
vector<string> vl; if (regex_search(str,results,szReg1)) { while (regex_search(it,end,results,szReg1)) { vl.push_back(results[1]);//這里就得到分組1 it=results[0].second; }
}
VC正則表達(dá)式摘錄:
字符元 | 意義 |
. | 匹配單個(gè)字符 |
[ ] | 指定一個(gè)字符類(lèi),匹配方括號(hào)內(nèi)的任意字符。例:[abc] 匹配 "a", "b"或 "c"。 |
^ | 如果^出現(xiàn)在字符類(lèi)的開(kāi)始處,它否定了字符類(lèi),這個(gè)被否定的字符類(lèi)匹配除卻方括號(hào)內(nèi)的字符的字符。如:[^abc]匹配除了"a", "b"和"c"之外的字符。如果^出現(xiàn)在正則表達(dá)式前邊,它匹配輸入的開(kāi)頭,例:^[abc]匹配以"a", "b"或"c"開(kāi)頭的輸入。 |
- | 在字符類(lèi)中,指定一個(gè)字符的范圍。例如:[0-9]匹配"0"到"9"的數(shù)字。 |
? | 指明?前的表達(dá)式是可選的,它可以匹配一次或不進(jìn)行匹配。例如: [0-9][0-9]? 匹配"2"或"12"。 |
+ | 指明?前的表達(dá)式匹配一次或多次。例如:[0-9]+匹配"1", "13", "666"等。 |
* | 指明*前的表達(dá)式匹配零次或多次。 |
??, +?, *? | ?, +和*的非貪婪匹配版本,它們盡可能匹配較少的字符;而?, +和*則是貪婪版本,盡可能匹配較多的字符。例如:輸入"<abc><def>", 則<.*?> 匹配"<abc>",而<.*>匹配"<abc><def>"。 |
( ) | 分組操作符。例如:(/d+,)*/d+匹配一串由逗號(hào)分開(kāi)的數(shù)字,例如: "1"或"1,23,456"。 |
/ | 轉(zhuǎn)義字符,轉(zhuǎn)義緊跟的字符。例如,[0-9]+ 匹配一個(gè)或多個(gè)數(shù)字,而 [0-9]/+ 匹配一個(gè)數(shù)字后跟隨一個(gè)加號(hào)的情況。反斜杠/也用于表示縮寫(xiě),/a 就表示任何數(shù)字、字母。如果/后緊跟一個(gè)數(shù)字n,則它匹配第n個(gè)匹配群組(從0開(kāi)始),例如,<{.*?}>.*?<//0>匹配"<head>Contents</head>"。注意,在C++字符串中,反斜杠/需要用雙反斜杠//來(lái)表示: "//+", "//a", "<{.*?}>.*?<///0>"。 |
$ | 放在正則表達(dá)式的最后,它匹配輸入的末端。例如:[0-9]$匹配輸入的最后一個(gè)數(shù)字。span> |
| | 間隔符,分隔兩個(gè)表達(dá)式,以正確匹配其中一個(gè),例如:T|the匹配"The" 或"the"。 |
縮寫(xiě)匹配
縮寫(xiě) | 匹配 |
/a | 字母、數(shù)字([a-zA-Z0-9]) |
/b | 空格(blank): ([ //t]) |
/c | 字母([a-zA-Z]) |
/d | 十進(jìn)制數(shù) ([0-9]) |
/h | 十六進(jìn)制數(shù)([0-9a-fA-F]) |
/n | 換行: (/r|(/r?/n)) |
/q | 引用字符串(/"[^/"]*/")|(/''''[^/'''']*/'''') |
/w | 一段文字 ([a-zA-Z]+) |
/z | 一個(gè)整數(shù)([0-9]+) |