对正则了解不多,在此记录一下平时经常用到的表达式&修饰符
1 匹配规则
参考文章:正则表达式 - 匹配规则
例:校验字符串中是否包含 ':', ';', '/', '', '%', '`'
NSString *nameRegex = @"^[^:;\\\\/%`]+$";
NSPredicate *namePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nameRegex];
return [namePredicate evaluateWithObject:name];
1.1 基本匹配模式
-
$
符号
表示结尾
:例如bucket$
,匹配‘in a bucket’,而不匹配‘buckets’ -
^
符号
有2个含义:- "开头",以
^abc
为例:匹配以abc
开头的字符串 - "非"或"排除",以
^[^abc]+$
为例:从头
到尾
,不包含(排除)a、b、c
的字符串
- "开头",以
1.2 字符簇
- 简单说就是用来描述我们匹配模式的方法,书写方式为
[.....]
[a-z] //匹配所有的小写字母 [A-Z] //匹配所有的大写字母 [a-zA-Z] //匹配所有的字母 [0-9] //匹配所有的数字 [0-9\.\-] //匹配所有的数字,句号和减号 [ \f\r\t\n] //匹配所有的白字符 [^a-z] //除了小写字母以外的所有字符 [^\\\/\^] //除了(\)(/)(^)之外的所有字符 [^\"\'] //除了双引号(")和单引号(')之外的所有字符
- 举个栗子🌰,匹配一个小写字母和一个数字组成的字符串,如‘a1’、‘b2’,但不是"ab2":
^[a-z][0-9]$
- 再举个栗子🌰,同样匹配2个字符的字符串,第一个不是数字,第二个是数字,如‘#1’、‘R2’:
^[^0-9][0-9]$
2 元字符
参考文章:正则表达式 - 元字符
这里组合演示了:
-
?<=
: xx之后
例:?<=href 表示 匹配 href之后 (不包含href) -
?=
: xx之前
例: ?=href 表示 匹配 href之前 (包含href) -
.*?
: 取尽量少的任意字符注:
.
代表的是任意字符。*
代表的是取 0 至 无限长度。?
代表的是非贪婪模式。例子,
CFBundleDisplayName="MUZO Player";
字符串中,我想获取MUZO Player
:(?<=CFBundleDisplayName=").*?(?=")
-
?<!
: 不以xx开头
例子,遍历字符串文件时,想过滤掉//"adddevice_test"="test";
这种字串:// 不以(//)开头,并且格式为("xxx"可能存在空格=可能存在空格"xxx";) (?<!//)".*?" ?= ?”.*?”;
阅读量
loading...