一. 简介
正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,通常被用于两种任务:
1.验证
通常需要在前后分别加上^和$,以匹配整个待验证字符串;
2.搜索/替换。
是否加上^和$根据搜索的要求而定,此外,也有可能要在前后加上\b而不是^和$。
下面列出常用的正则表达式:
说明 | 正则表达式 |
---|---|
网址(URL) | [a-zA-z]+://[^\s]* |
IP地址(IP Address) | ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) |
电子邮件(Email) | \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* |
QQ号码 | [1-9]\d{4,} |
HTML标记(包含内容或自闭合) | <(.*)(.*)>.*<\/\1>|<(.*) \/> |
密码(由数字/大写字母/小写字母/标点符号组成,四种都必有,8位以上) | (?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$ |
日期(年-月-日) | (\d{4}|\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9])) |
日期(月/日/年) | ((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\d{4}|\d{2}) |
时间(小时:分钟, 24小时制) | ((1|0?)[0-9]|2[0-3]):([0-5][0-9]) |
汉字(字符) | [\u4e00-\u9fa5] |
中文及全角标点符号(字符) | [\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee] |
*固定电话号码 | (\d{4}-|\d{3}-)?(\d{8}|\d{7}) |
*手机号码 | 1\d{10} |
*邮政编码 | [1-9]\d{5} |
*身份证号(15位或18位) | \d{15}(\d\d[0-9xX])? |
非负整数(正整数或零) | \d+ |
正整数 | [0-9]*[1-9][0-9]* |
负整数 | -[0-9]*[1-9][0-9]* |
整数 | -?\d+ |
小数 | (-?\d+)(\.\d+)? |
不包含abc的单词 | \b((?!abc)\w)+\b |
二.语法
\:将下一个字符标记为一个特殊的字符、一个原义字符、一个向后引用或者一个八进制转义符。例如“\n”就是匹配一个换行符。
^:匹配开始位置,例如^(a),匹配开头必须为a。
$:匹配结束位置,例如$(a),匹配结尾必须为a。
*:匹配前面的子表达式零次或者多次,例如“ab*”这个表达式能匹配“a”和“abb”。
+:匹配前面的子表达式一次或者多次,例如“ab+”这个表达式能匹配“ab”和“abb”,但不能够匹配“a”。
?:匹配前面的子表达式零次或者一次,如“ab?”这个表达式就能够匹配“jian(guo)?”就可以匹配“jian”和“jianguo”。
{n}:n是一个非负数,匹配n次,如“guo{2}”,可以匹配“guoo”,不能匹配“guo”。
{n,}:n是一个非负数,匹配至少n次。
{n, m}:m、n都是非负数,最少匹配n次,最多匹配m次。
(pattern):匹配pattern并获取匹配结果。
(?:pattern):匹配pattern但不获取匹配结果。
x|y:匹配x或y,如“(xu|jian)guo”匹配“xuguo”或者“jianguo”。
[xyz]:字符集合,匹配所包含的任意字符。如“[abc]”可以匹配“apple”中的“a”。
[^xyz]:匹配未被包含的字符。
[a-z]:字符范围,匹配指定范围内的任意字符。
[^a-z]:匹配指定不在范围内的任意字符。
\b:匹配一个单词的边界,如“guo\b”可以匹配“xujianguo”中的“guo”。
\B:匹配非单词边界,如“jian\B”可以匹配“xujianguo”中的“jian”。
\d:匹配一个数字字符,等价于“[0-9]”。
\D:匹配一个非数字字符。
\f:匹配一个换页符。
\n:匹配一个换行符。
\r:匹配一个回车符。
\s:匹配任何空白字符
三.补充
3.1 NSString自带的正则查找、替换方法
3.11 正则查找方法:
– rangeOfString:options:
– rangeOfString:options:range:
– rangeOfString:options:range:locale:
3.12 替换方法:
– stringByReplacingOccurrencesOfString:withString:options:range:
3.2 使用 RegexKitLite
3.21 使用方法:
将RegexKitLite.h和RegexKitLite.m加入到工程,然后引入libicucore.dylib库即可。
3.3 使用 RegexKit.framework 框架
TRegexKit.framework与 RegexKit Lite 的区别
RegexKit.framework | RegexKit Lite | |
---|---|---|
Regex Library | PCRE | ICU |
Library Included | Yes, built into framework object file. | No, provided by Mac OS X. |
Library Linked As | Statically linked into framework. | Dynamically linked to /usr/lib/libicucore.dylib. |
Compiled Size | Approximately 371KB † per architecture. | Very small, approximately 16KB—20KB ‡ per architecture. |
Style | External, linked to framework. | Compiled directly in to final executable. |
Feature Set | Large, with additions to many classes. | Minimal, NSString only. |
四.学习资料
iOS 开发中使用正则表达式-暨 RegexKitLite 库的用法
RegexKitLite Documentation
[perl]理解贪婪匹配和最小匹配之间的区别
NSString Class Reference
ICU – International Components for Unicode