正则表达式



/正则表达式:

第一讲 字符:
 "普通字符" : 大部分的字符 包括字母和数字 他们只能匹配他们自己
 "元字符" : 他们可以匹配其他字符

 元字符:
   点元字符 "." : 他表示他可以匹配任意字符
     • c.t 可以匹配cat, cot, cit, 甚至可以匹配 c.t ;但不可以匹配换行符
   反斜杠元字符 "\" : 他可以忽略元字符 使得元字符可以和普通字符一样
     • c\.t 表示 匹配 c.t ; c\\t 表示匹配 c\t ;
     
第二讲 字符类:
 字符类 : 是一组在方括号内的字符, 表示可以匹配其中的任何一个字符;
  例如 c[abc]d 表示匹配 cad 或 cbd 或 ccd  三种字符串
 字符类的范围 : 可以通过短横线表示匹配字母或数字的范围;
  • [b-f] 等价于 [bcdef] , [A-Z] 等价于[ABC...XYZ] , [1-4] 等价于 [1234]
  • [0-9.,]表明匹配一个数字,或者一个全角句号,或者一个逗号
  • [0-9a-fA-F]意味着匹配一个十六进制数
  • [a-zA-Z0-9\-]意味着匹配一个字母、数字或者一个短横线
  注意 不要使用z-A 因为他们之间是有字符存在的 [1-31]代表的是匹配1或者2或者3

第三讲 字符类的反义:
 反义字符: "^" 只可以放在字符类的起始位置 [5^1] 是非法的
  • [^a]表示匹配任何不是“a”的字符
  • [^a-zA-Z0-9]表示匹配任何不是字母也不是数字的字符
  • [\^abc]匹配一个为“^”或者a或者b或者c的字符
  • [^\^]表示匹配任何不为“^”的字符

第四讲 转义字符类:
 转义字符: "\d"  等价于 [0-9]        "\D"  等价于  [^0-9] 
 转义字符: "\w"  等价于 [0-9a-zA-Z]      "\W"  等价于 [^0-9a-zA-Z]
 转义字符: "\s"  匹配 空格, 制表符, 回车, 换行  "\S"  匹配一个非空字符
 转义字符: "?"  表示 {0,1}  例如colou?r 表示匹配 colour 或 color
 转义字符: "*"  表示 {0, }   例如 .* 表示匹配任意内容
 转义字符: "+"  表示 {1, }  例如 \w+ 表示匹配任意由字母数字组成的串

第五讲 重复:
 在字符或者字符集之后 可以使用大括号{}表示重复
  • a{1} 等价于 a
  • a{3} 等价于 aaa
  • a{0}  表示匹配空字符串。从这个正则表达式本身来看,它毫无意义。
     如果你对任何文本执行这样的正则表达式,你可以定位到搜索的起始位置,即使文本为空。
  • a\{2\}表示匹配字符串 “a{2}”
  • 在字符类中,大括号没有特殊含义。[{}]表示匹配一个左边的大括号,或者一个右边的大括号
 重复范围: 这样的表达式优先匹配最长字符
  • x{4,4}与x{4}相同
  • colou{0,1}r表示匹配colour或者color
  • a{3,5}表示匹配aaaaa或者aaaa或者aaa
  • a {1,}表示匹配一个或一个以上的连续字符a
  • .{0,}表示匹配任意内容
 
第六讲 匹配
 非贪婪匹配:
  ".*" 表示匹配双引号 然后是任意长度任意字符 然后是双引号 但是其中可能包括双引号
  所以在结尾加上一个 "?" 表示不在匹配最长串 ".*"? 表示匹配双引号 最短串 双引号;
 选择匹配:
  cat|dot 表示匹配 cat 或者 dot
 
第七讲 分组
 • (red|blue) 表示匹配red或者blue或者是一个空字符串
 • abc()def   等价于 abcdef
 • (red|blue)?  等价于  (red|blue|)
 • \w+(\s+\w+)表示匹配一个或多个由空格分隔的单词

第八讲 分隔符
 分隔符 "\b" 表示匹配一个单词分隔符 在单词和非单词之间有单词分隔符 文本的开头和结尾通常也有
 

//使用方法:

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

bool is_phone_number_valid( const std::string& phone_number )

{
 const std::regex pattern( "15\\d{9}" );        // 对于转义字符 \d代表[0-9] 第一个\代表程序的转义 第二个代表正则的转义
 return std::regex_match( phone_number, pattern );    // 如果要匹配phone_number4 则应写 15d{9}
}


int main()
{
 std::string phone_number1 = "1234567890";
 std::string phone_number2 = "15030659529";
 std::string phone_number3 = "45618asd59s";
 std::string phone_number4 = "15ddddddddd";

 std::cout << phone_number1 << " : " << ( is_phone_number_valid( phone_number1 ) ? "valid" : "invalid" ) << std::endl;
 std::cout << phone_number2 << " : " << ( is_phone_number_valid( phone_number2 ) ? "valid" : "invalid" ) << std::endl;
 std::cout << phone_number3 << " : " << ( is_phone_number_valid( phone_number3 ) ? "valid" : "invalid" ) << std::endl;
 std::cout << phone_number4 << " : " << ( is_phone_number_valid( phone_number4 ) ? "valid" : "invalid" ) << std::endl;

 return 0;
}


 
 
 
 
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值