正则表达式

正则表达式是含有一些具有特殊意义字符的字符串,这些特殊的字符称为正则表达式。

常用正则表达参照表:

元字符

正则表达式的写法

意义

.(点)

.(点)

代表任何一个字符

\d

\\d

代表0到9的任何一个数字

\D

\\D

代表任意一个非数字字符

\s

\\s

代表任意一个空格类字符(例如:’\t’ ,‘\n’, ‘\x0B’ ,‘\f’,’\r’ )

\S

\\S

代表非空格类字符

\w

\\w

代表可用于标识符的字符(不包括美元符号)

\W

\\W

代表不能用于标识的字符

\p{Lower}

\\p{Lower}

小写字母[a-z]

\p{Upper}

\\p{UPPer}

大写字母[A-Z]

\p{ASCII}

\\p{ASCII}

ASCII码字符

\p{Alpha}

\\p{Alpha}

字母

\p{Digit}

\\p{Dight}

数字字符[0-9]

\p{Alunm}

\\p{Alunm}

字符或数字

\p{Punct}

\\p{Punct}

标点符号(英文各种标点)

\P{Graph}

\\p{Graph}

可视字符:\p{Alunm},\p{Punct}

\P{Print}

\\p{Paint}

可打印字符:\p{Graph}

\P{Blank}

\\P{Blank}

空格或制表符[\t]

\P{Cntrl}

\\P{Cntrl}

控制字符:[\x00-\xlF\x7F]

在正则表达式中,可以使用方括号括起来若干字符来表示一个元字符,该字符代表方括号中任何一个字符。

例如:

[012]A可以和0A,1A,2A匹配。

方括号元字符的意义如下:

[abc]:代表a、b、c中的任何一个。

[^abc]:代表除a、b、c中的任何一个。

[a-zA-Z]:代表英文字目中的最后一个。

[a-d]:代表a到d中的任何一个。

中括号中允许嵌套中括号,可以进行并、交、差运算。

[a-d[m-p]]:代表a到d,或m到p中的任何一个的字符(并)。

[a-z&&[def]]:代表d、e、f中的任何一个(交)。

[a-f&&[^bc]]:代表a、d、e、f中的一个(差)。

注:由于“.”表示任何一个字符,所以在正则表达式中如果想使用普通意义的点字符。必须使用[.]或者用\56表示普通意义的点字符。

在正则表达式中可以使用界限定符。例如界定修饰符“?”。如果x代表正则表达式中的一个元字符或普通字符,那么“x?”代表x表示出现0次或1次。

限定符:

待限定符的模式

意义

X?

X出现0次或1次

X*

X出现0次或多次

X+

X出现一次或多次

X{n}

X恰好出现n次

X{n,}

X至少出现n次

X{n,m}

X出现n到m次

XY

X与Y

X|Y

X或Y

 

使用示例:

C++

需要包含头文件:

#include<regex>

regex_match:

判断一个正则表达式(参数re)是否匹配整个字符序列str,它主要用于验证文本,注意,这个正则表达式必须匹配被分析串的全部,否则返回false;如果整个序列被成功匹配,返回true

regex_search:

类似于regex_match,但它不要求整个字符序列完全匹配,可以用regex_search来查找输入中的一个子序列,该子序列匹配正则表达式re

regex_replace:

在整个字符序列中查找正则表达式re的所有匹配,这个算法每次成功匹配后,就根据参数fmt对匹配字符串进行替换。

    "[\\+\\-]?[0-9]*(\\.[0-9]+)?([Ee][\\+\\-]?[0-9]+)?"

    \\为转译。

    [\\+\\-]?:有一个或者没有+或-(有负数和正数,但正号可以忽略不写)

    [0-9]*:有0个或多个0-9

    \\.[0-9]+:有点且至少有一个数字(小数点后必须跟数字)

    (\\.[0-9]+)?:可以没有小数点,但有小数点时后面至少有一个数字。

    [Ee][\\+\\-]?:E、e后可以有+、-或没有。

    [Ee][\\+\\-]?[0-9]+:E、e后必须有数字。

    ([Ee][\\+\\-]?[0-9]+)?:可以没有

程序示例:

#include<iostream>

#include<regex>

#include<string>

using namespace std;

bool isNumeric(char* str1)

{

    //构造符合规定的正则表达式

    regex reg("[\\+\\-]?[0-9]*(\\.[0-9]+)?([Ee][\\+\\-]?[0-9]+)?");

    smatch r;

    string str = string(str1);

    return regex_match(str,r,reg);

}

int main()

{

    //+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是


    cout << isNumeric("123.45e+6") << endl;

    cout << isNumeric("5e2") << endl;

    cout << isNumeric("-123") << endl;

    cout << isNumeric("+100") << endl;

    cout << isNumeric("-1E-16") << endl;

    cout << isNumeric("-.123") << endl;

    cout << "------------------------------------------------" << endl;

    cout << isNumeric("12e") << endl;

    cout << isNumeric("1a3.14") << endl;

    cout << isNumeric("1.2.3") << endl;

    cout << isNumeric("12e+4.3") << endl;

    cout << isNumeric("+-5") << endl;


    return 0;

}

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值