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