C 正規表示式

2021-09-09 06:39:43 字數 3994 閱讀 5661

正規表示式 regex(regular expression)是描述或匹配某個句法規則的字串,用於檢索、替換那些匹配某個模式的文字。

乙個正規表示式通常被稱為乙個模式。由表示式、量詞、斷言組成。

寫在最後

表示式可以是以下項之一:

字元類名

說明alnum

字母(不區分大小寫)和數字

alpha

字母(不區分大小寫)

blank

空格或製表符

cntrl

檔案格式轉義字元

digit

數字graph

字母(不區分大小寫)、數字和英文標點

lower

小寫字母

upper

大寫字母

print

字母(不區分大小寫)、數字、英文標點和空格

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]+, 可匹配aaab

斷言含義

\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...