正则表达式

正则表达式的介绍

  • 在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码
  • 在很多文本编辑器里,可以使用正则表达式进行检索,Xcode同样支持正则表达式!
  • 几乎所有的程序设计语言都支持正则表达式,例如:OC,java,c#,python,js,perl等
  • 概括:正则表达式是一个字符串匹配``利器

练习:

  • 练习1:匹配abc
let str = "abcewef34dwabcewer3ewc"

let pattern = "abc"

guard let regex = try? NSRegularExpression(pattern: pattern, options: []) else {
    return
}

let results = regex.matches(in: str, options: [], range: NSRange(location: 0, length: str.characters.count))

for result in results {
    print((str as NSString).substring(with: result.range))
}

/**
  输出:
  abc
  abc
**/
  • 练习2:包含一个a~z,后面必须是0~9 -->[a-z][0-9]或者[a-z]\d
let str = "abcewef34dwabcewer3ewc"

let pattern = "[a-z][0-9]"//或"[a-z]\\d"

guard let regex = try? NSRegularExpression(pattern: pattern, options: []) else {
    return
}

let results = regex.matches(in: str, options: [], range: NSRange(location: 0, length: str.characters.count))

for result in results {
    print((str as NSString).substring(with: result.range))
}

/**
  输出:
  f3
  r3
**/
  • 练习3:必须第一个是字母,第二个是数字 -->^[a-z][0-9]$
let str = "a230943589320"

let pattern = "^[a-z][0-9]"//表示首位是字母,下一位是一个数字
//^[a-z]\d{5}} 表示首位为字母,然后取后面5位为数字。匹配后:a23094
//^[a-z]\d{2,5}} 表示首位为字母,然后取后面2到5位为数字。匹配后:a23094
// [a-z]$ 表示末尾为字母

guard let regex = try? NSRegularExpression(pattern: pattern, options: []) else {
    return
}

let results = regex.matches(in: str, options: [], range: NSRange(location: 0, length: str.characters.count))

for result in results {
    print((str as NSString).substring(with: result.range))
}
/**
  输出:
  a2
**/
  • 练习4:必须第一个是字母,字母后面跟上4~9个数字
  • 练习5:不能是数字0-9
"^[^0-9]" 表示字符串不能以0-9的数字开头
  • 练习6:QQ号码匹配:
^[1-9]\d{4,11}$

都是数字

5~12位

并且第一位不能是0
  • 练习7:手机号码匹配
^1[3578]\d{9}$

以13/15/17/18

长度是11

常用正则表达式

//"@coderwhy:【动物尖叫合辑】#肥猪流#猫头鹰这么尖叫[偷笑]、@M了个J: 老鼠这么尖叫、兔子这么尖叫[吃惊]、@花满楼: 莫名奇#小笼包#妙的笑到最后[好爱哦]!~ http://t.cn/zYBuKZ8/"

//let pattern = "@.*?:" //匹配@他:
//let pattern = "#.*?#" //匹配话题#...#
//let pattern = "\\[.*?\\]" //匹配表情
let pattern = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?" //匹配url

results matching ""

    No results matching ""