正则表达式的学习

本文主要记录了自己在工作中用到的部分正则表达式的零星点碎的内容。

  1. \\.\\|\\操作。 \\|这是转义的意思 “\” “|” 都是特殊字符所以需要转义,第二个反斜杠 \ 转义 |

  2. 前瞻后顾 学习 !?操作

  3. 贪婪与非贪婪 ? 当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。 有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:
    a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。

1
2
3
4
5
6
7
\d+:匹配数字一次或者多次
\d.*:先匹配一位数字,剩下匹配任意字符零次或者多次
\d.*?:*?这个表示非贪婪模式,表示匹配最少的数量匹配
例子:<DIV>123<DIV>456<DIV>
贪婪:<DIV>.*<DIV> ====> <DIV>123<DIV>456<DIV>
非贪婪:<DIV>.*?<DIV>====> <DIV>123<DIV>

在我们闪惠的输入限制里面,有如下的正则:

1
2
3
4
5
6
7
NSString *regex = @"^(?!0[^\\.])\\d+\\.?\\d{0,2}$";
解析下来就是如下,比使用代码一个一个判断条件过滤要好太多了。
/**
* (?!0[^\.]) 第一个数字为0的时,后面只能输入小数点
* \d+\.? 小数点前(若有)只能为数字
* \d{0,2} 小数点后最多输入两位数字
**/
  1. 范围 / rex /gmi g–global, m–multiline, i–ignore
  2. 常用的元字符
代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符,空格,tab,换行,中文全角空格等
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

常用的限定符

代码 语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
  1. []里面的不要转义,比如 [aeiou]匹配每一个元音,[.*?]匹配标点符号(.?!)