語(yǔ)法規(guī)則
- 1 集合
[xyz] 字符集合(x/y或z)
[a-z] 字符范圍
[^xyz] 負(fù)值字符集合 (任何字符, 除了xyz)
[^a-z] 負(fù)值字符范圍
[a-d][m-p] 并集(a到d 或 m到p)
- 常用元字符
. 匹配除換行符以外的任意字符
^ 匹配字符串的開始
$ 匹配字符串的結(jié)束
\w 匹配字母或數(shù)字或下劃線或漢字 [a-zA-Z_0-9]
\s 匹配任意的空白符(空格、TAB\t、回車\r \n)
\d 匹配數(shù)字 [0-9]
\b 匹配單詞的開始或結(jié)束
- 常用反義符
\W 匹配任意不是字母,數(shù)字,下劃線,漢字的字符[^\w]
\S 匹配任意不是空白符的字符 [^\s]
\D 匹配任意非數(shù)字的字符[^0-9]
\B 匹配不是單詞開頭或結(jié)束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou這幾個(gè)字母以外的任意字符
- 常用限定符
* 重復(fù)零次或更多次
+ 重復(fù)一次或更多次
? 重復(fù)零次或一次
{n} 重復(fù)n次
{n,} 重復(fù)n次或更多次
{n,m} 重復(fù)n到m次,
- 貪婪和懶惰
*? 重復(fù)任意次,但盡可能少重復(fù)
*+ 重復(fù)1次或更多次,但盡可能少重復(fù)
?? 重復(fù)0次或1次,但盡可能少重復(fù)
{n,m}? 重復(fù)n到m次,但盡可能少重復(fù)
{n,}? 重復(fù)n次以上,但盡可能少重復(fù)
代碼示例
示例 1
private func check(str: String) {
// 使用正則表達(dá)式一定要加try語(yǔ)句
do {
// - 1、創(chuàng)建規(guī)則
let pattern = "[1-9][0-9]{4,14}"
// - 2、創(chuàng)建正則表達(dá)式對(duì)象
let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)
// - 3、開始匹配
let res = regex.matchesInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.characters.count))
// 輸出結(jié)果
for checkingRes in res {
print((str as NSString).substringWithRange(checkingRes.range))
}
}
catch {
print(error)
}
}
示例 2 : 至少包括字母數(shù)字固定字符中任意2種組成長(zhǎng)度8-12的正則表達(dá)式
private func check(str: String) {
// 使用正則表達(dá)式一定要加try語(yǔ)句
do {
// - 1、創(chuàng)建規(guī)則
let pattern = "(?!^(\\d+|[a-zA-Z]+|[()!\"#$%&'()*+,-./:;<=>?@\\[\\]\\^_`{|}~]+)$)^[\\w()!\"#$%&'()*+,-./:;<=>?@\\[\\]\\^_`{|}~]{8,12}$"
// - 2、創(chuàng)建正則表達(dá)式對(duì)象
let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)
// - 3、開始匹配
let res = regex.matchesInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.characters.count))
// 輸出結(jié)果
for checkingRes in res {
print((str as NSString).substringWithRange(checkingRes.range))
}
}
catch {
print(error)
}
}
解釋
?! 零寬度斷言,匹配但是不占用寬度
\d: 匹配一個(gè)數(shù)字字符;
\d+:匹配數(shù)字字符一次或多次
|:或者 相當(dāng)于Or
[a-zA-Z]+:匹配字母一次或多次
[()!\"#$%&'()*+,-./:;<=>?@\\[\\]\\^_`{|}~]+:匹配特殊字符一次或多次
(?!^(\\d+|[a-zA-Z]+|[()!\"#$%&'()*+,-./:;<=>?@\\[\\]\\^_`{|}~]+)$):匹配第一種
\w:匹配包括下劃線的任何單詞字符。類似但不等價(jià)于“[A-Za-z0-9_]”
()!\"#$%&'()*+,-./:;<=>?@\\[\\]\\^_`{|}~:匹配特殊字符
{8,12}:最少匹配7次最多匹配20次
^[\\w()!\"#$%&'()*+,-./:;<=>?@\\[\\]\\^_`{|}~]{8,12}$:匹配第二種
參考連接
iOS中的謂詞(NSPredicate)使用
最全的常用正則表達(dá)式大全
正則表達(dá)式中各種字符的含義