正規表示式 regex(regular expression)是描述或匹配某個句法規則的字串,用於檢索、替換那些匹配某個模式的文字。乙個正規表示式通常被稱為乙個模式。由表示式、量詞、斷言組成。
寫在最後
表示式可以是以下項之一:
字元類名
說明alnum
字母(不區分大小寫)和數字
alpha
字母(不區分大小寫)
blank
空格或製表符
cntrl
檔案格式轉義字元
digit
數字graph
字母(不區分大小寫)、數字和英文標點
lower
小寫字母
upper
大寫字母
字母(不區分大小寫)、數字、英文標點和空格
punct
英文標點
sapce
空格xdigit
表示十六進製制的字元(數字,a,b,c,d,e,f,a,b,c,d,e,f)
d與digit相同
s與space相同
w與alnum相同
轉義序列
等效命名類
預設命名類
\d
[[:d:]]
[[:digit:]]
\d
[^[:d:]]
[^[:digit:]]
\s
[[:s:]]
[[:space:]]
\s
[^[:s:]]
[^[:space:]]
\w
[[:w:]]
[a-za-z0-9]
\w
[^[:w:]]
[^a-za-z0-9]
乙個量詞指定了要匹配的表示式出現的次數。例如,x
表示必須且只能匹配乙個字元x
,而x
表示至少匹配乙個x
,最多匹配三個x
。
量詞含義
e?匹配0次或者1次e
(表示式),等價於e
e+至少匹配一次e
,等價於e
e*匹配0次或者多次e
,等價於e
e匹配n次e
,等價於e
e至少匹配n次e
e至多匹配m次e
e至少匹配n次,至多匹配m次e
例如:[a-c]+
, 可匹配aaa
、b
斷言含義
\b乙個單詞的邊界
\b乙個非單詞的邊界
(?=e)
表示式後面緊跟著e才匹配成功,但不會改名目標序列中匹配的位置
(?!e)
表示式後沒有緊跟著e才匹配成功,但不會改名目標序列中匹配的位置
(?:e)
表示式後面緊跟著e才匹配成功
例如:
\\bmail\\b
匹配的就是乙個單詞mail
。
this is a t(?!est)
表示如果t
後面沒有est
就匹配,這主要用於替換,後面會有例項。
this is a t(?=est)
表示如果t
後面有est
就匹配,這主要用於替換,後面會有例項。
在c++中使用正規表示式需要用到regex
庫。
預設情況下,正規表示式遵循ecmascript語法。
常用函式:
函式名稱
解釋regex_match
將乙個字串行與正規表示式進行匹配。
regex_search
查詢字串行中與正規表示式匹配的結果,找到第乙個之後就會返回結果並停止查詢。
regex_replace
替換字元到正交表示式匹配到字串行的位置。
郵箱的一般格式:***@***.com
驗證 ***@163.com 格式的郵箱。
正規表示式:[[:graph:]]+@163[.]com
,這裡將.
用方括號括起來是因為.
在正在表示式中是乙個萬用字元。
#include
#include
using
namespace
std;
int main()
原理:
ip位址是有四個用小數點隔開的十進位制整數(0~255)組成的,每個整數的位數不確定,以及整數是不同位數的時候,每個位上數字的取值範圍也會存在差異,所以需要一一匹配。
當整數是一位的時候,取值是0~9,正規表示式\\d
(反斜槓需要轉義);
當整數是兩位的時候,取值是0~9,正規表示式\\d
;
當整數是三位的時候,當最高位是1的時候,其它兩位的取值是0~9,正規表示式1\\d
;當最高位是2的時候,其它兩位的取值是0~5,正規表示式2[0-5]
;
然後用|
(或)連線。
#include
#include
using
namespace
std;
int main()
|(1\\d)|2[0-5])[.](\\d|\\d|(1\\d)|2[0-5])[.](\\d|\\d|(1\\d)|2[0-5])[.](\\d|\\d|(1\\d)|2[0-5])";
regex rule(re);
string str = "100.100.100.0";
cout
<< regex_match(str, rule) << endl; //true
system("pause");
return
0;}
這裡主要涉及到regex_replace
函式的使用。
函式原型:
basic_string<_elem, _traits1, _alloc1> regex_replace(
const basic_string<_elem, _traits1, _alloc1>& _str,
const basic_regex<_elem, _rxtraits>& _re,
const _elem *_ptr,
regex_constants::match_flag_type _***s =regex_constants::match_default);
一共四個引數,第乙個引數是目標字串,第二個引數是正規表示式規則,第三個是用於替換的字串, 第四個是設定正規表示式如何匹配以及格式化用於替換的字串。
#include
#include
using
namespace
std;
int main()
#include
#include
using
namespace
std;
int main()
鏈結2
C 正規表示式
c 中的正規表示式 1 c 中的正規表示式 jeffrey e.f.friedl寫了一本關於正規表示式的書 精通正規表示式 作者為了使讀者更好的理解和掌握正規表示式,編造了乙個故事。該書的語言以perl為主。據我所知c 中的正規表示式也是基於perl5。所以它們應該有許多的共同之處。其實,我並不打算...
C 正規表示式
正規表示式 元字元 匹配任何單個字元,匹配括號內的任何乙個字元,改變優先順序,定義提取組,將兩個匹配條件進行邏輯或運算,匹配0至多個它之前的子表示式,和萬用字元 沒關係,匹配前面的子表示式一次或多次,匹配前面的子表示式零次或一次,匹配前面表示式確定的n次,匹配前面表示式至少n次,匹配前面表示式n到m...
C 正規表示式
正規表示式元字元 1 中括號 用來描述匹配規則,乙個中括號只能匹配乙個字元 2 小括號 用來描述匹配的字串,乙個小括號表示匹配一段字串 3 大括號 用來描述匹配的具體數量 4 s 用於匹配單個空格符,包括tab鍵和換行符 5 s 用於匹配除單個空格符之外的所有字元 6 d 用於匹配從0到9的數字 7...