pattern格式(基本通用):

pattern格式

符号

说明

^

匹配开头

$

匹配结尾

.

匹配任意一个字符

[...]

匹配任意一个指定的字符

[^...]

匹配任意一个非指定的字符

*

匹配0个或多个字符前面的字符,没有也算

+

匹配至少一个或多个前面的字符

{n}

匹配n个前面的字符,从1开始

{,n}

匹配最多n个前面的字符

{m,}

匹配至少m个前面的字符

{m,n}

匹配至少m最多n个前面的字符

a|b

匹配a或b

()

匹配组

(?#...)

注释

\w

匹配任意一个字母

\W

匹配任意一个非字母

\d

匹配任意一个数字

\D

匹配任意一个非字符

python正则表达式re

re.match(pattern,string)    #从开头匹配,group()查看匹配项(组)

re.findall(pattern,string)    #匹配全部,返回列表

re.search(pattern,string)      #返回类型,可用于判断,要用group调用

re.sub(pattern,repl,string,count)    #替换

re.split(pattern,string)     #去掉匹配的,把不匹配的分割

实例一(python):

import re
#匹配
str1="z192.168.1.1"
pattern="([0-9]{1,3}\.)([0-9]{1,3}\.)"
result1=re.match(pattern,str1)
if bool(result1):
    print("match=",result1.group(0))
else:
    print("match fails")
result2=re.search(pattern,str1)
if bool(result2):
    print("search=",result2.group(0))
else:
    print("search fails")
#替换
str2="asdsasaff"
pattern="a"
fmt="A"
print("replace_all=",re.sub(pattern,fmt,str2,count=0))
print("replace_onlyone=",re.sub(pattern,fmt,str2,count=1))
print("replace_onlytwo",re.sub(pattern,fmt,str2,count=2))
得出:
match fails
search= 192.168.
AsdsAsAff
Asdsasaff
AsdsAsaff
View Code

 

re.compile(pattern)->patternObj

patternObj.match(string,flag)...

 

 

 

C++正则表达式<regex>

类:

basic_regex  包装正则表达式

match_results  包含一系列匹配项

regex_constants  各种类型

 

函数:

regex_match(string,match_result,regex)   匹配全部,返回布尔

regex_search(string,match_result,regex)     匹配,返回布尔

regex_replace(string,regex,format)    替换所有

regex_replace(string,regex,format,fonly)    只替换一次

完全匹配,返回布尔

basic_regex构造函数

explicit basic_regex(_In_z_ const _Elem *_Ptr,  正则

        flag_type _Flags = regex_constants::ECMAScript   匹配模式

)

 

match_results接受结果:

成员:

match_results::str(size_t)  返回匹配项

match_results::size()   返回匹配项数

 

匹配常数regex_constants:

元素

BRE

ERE

ECMA

grep

egrep

awk

使用“|”的分支结构

 

+

+

 

+

+

使用“\n”的分支结构

     

+

+

 

定位点

+

+

+

+

+

+

后向引用

+

 

+

+

   

括号表达式

+

+

+

+

+

+

使用“()”的捕获组

 

+

+

 

+

+

使用“\(\)”的捕获组

+

   

+

   

控件转义序列

   

+

     

dsw 字符转义

   

+

     

文件格式转义

   

+

   

+

十六进制转义序列

   

+

     

标识转义

+

+

+

+

+

+

否定断言

   

+

     

否定字边界断言

   

+

     

非捕获组

   

+

     

非贪婪重复

   

+

     

八进制转义序列

         

+

普通字符

+

+

+

+

+

+

肯定断言

   

+

     

使用“{}”的重复

 

+

+

 

+

+

使用“\{\}”的重复

+

   

+

   

使用“*”的重复

+

+

+

+

+

+

使用“?”和“+”的重复

 

+

+

 

+

+

Unicode 转义序列

   

+

     

通配符

+

+

+

+

+

+

字边界断言

   

+

     

具体参照:https://msdn.microsoft.com/zh-cn/library/bb982727.aspx

实例二(C++):

#include<regex>
#include<string>
#include<iostream>

using namespace std;

int main()
{
    //匹配   一个字符串,一个返回,一个正则
    string str1 = "192.168.1.1";
    std::regex rx("([0-9]{1,3}\.)+",regex_constants::egrep);
    match_results<std::string::const_iterator>mr;
    std::cout <<"result="<<std::boolalpha<< regex_search(str1,mr, rx)<<std::endl;
    std::cout <<"size="<< mr.size()<<std::endl<<"str_group=" <<mr.str(0) << std::endl;
    //替换  
    string str("asdsasaff");
    regex rx2("a");
    string fmt("A");
    cout <<"replace_all=" <<regex_replace(str, rx2, fmt) << endl;
    cout <<"replace_onlyone="<<regex_replace(str, rx2, fmt, regex_constants::format_first_only) << endl;
    return (0);
}
得出:
result=true
size=2
str_group=192.168.1.
replace_all=AsdsAsAff
replace_onlyone=Asdsasaff
View Code

 

posted on 2016-08-21 00:54  euewrqe  阅读(1152)  评论(0编辑  收藏  举报