正则表达式大全(深度解析)
说明: 这是一个 Swift 版的正则表达式的使用和解读。一共有三种使用的方法。和一些常用的正则表达式。 第一:首先看一个枚举 简介:它是一个写在oc里面的一个枚举,但是它使用在Swift和OC之间。 实例:
// // RegulareHeader.h // Regularexpressions // Created by 周双建 on 16/5/5. // Copyright ? 2016年 周双建. All rights reserved. // #ifndef RegulareHeader_h #define RegulareHeader_h #import <UIKit/UIKit.h> NS_ENUM(NSInteger,RegulareType){ // 手机号 IphoneNumber = 0, // 全部小写字母 LowercaselettersString,0)"> // 用户名字 UserNameString,0)"> // 身份证 IdentityString, //月份 MonthString,0)"> // 汉字 ChinesecharactersString, }; #endif /* RegulareHeader_h */ oc #import "RegulareHeader.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad];
RegulareSwift * S = [[RegulareSwift alloc]init]; NSLog(@"%d",[S checkstring:@"14" reglaretype:MonthString]); :@"18811520397" reglaretype:IphoneNumber]); // Do any additional setup after loading the view,typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
其中的reglaretype:IphoneNumber 就是其使用。
Swift
import Foundation class RegulareSwift: NSObject { internal func checkstring(dostring:String,reglaretype:RegulareType) -> Bool { let Value:Int = reglaretype.rawValue;
第二:正则大典。
// RegulareSwift.swift /* 一、什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式。正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分。 二、常用词的介绍 “d”匹配一个数字字符。等价于[0-9]。
“D”匹配一个非数字字符。等价于[^0-9]。 “w”匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
“W”匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。 “ ”将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配n。“n”匹配换行符。序列“”匹配“”而“(”则匹配“(”。 “ ^ ”匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“n”或“r”之后的位置。 “ $ ”匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“n”或“r”之前的位置。 “ * ”匹配前面的子表达式零次或多次(大于等于0次)。例如,zo*能匹配“z”,“zo”以及“zoo”。*等价于{0,}。 “ + ”匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,0)"> “ ? ”匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。 “ {n} ” n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。 “ {n,} ”n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。 “ {n,m} ” m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。 “ ? ”当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。 “ . ”点匹配除“rn”之外的任何单个字符。要匹配包括“rn”在内的任何字符,请使用像“[sS]”的模式。 “ x|y ”匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。 “ [xyz] ”字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。 “ [^xyz]“负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。 ” [a-z] “字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身. ” [^a-z] “负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。 */ import Foundation class RegulareSwift: NSObject { RegulareType) -> Bool { let Value:Int = reglaretype.rawValue; switch Value { case 0: // 判断手机号 /* * 表达式的解读 * ^1[3|4|5|7|8][0-9]d{8}$ 等价于 ^1[3|4|5|7|8]d{9}$ * Start: 首先,我们将表达式拆分 5 份。这5份分别是 ^1 、[3|4|5|7|8]、[0-9]、d{8}、$。 * Analysis : * one: ^1 代表手机号必须是以 1 开头的。 * two: [3|4|5|7|8] 代表是在3、4、5、7、8 里面选任意一个数。 * three: [0-9] 代表的是 0-9 之间的任意一个数字 * four: d 等价于[0-9];d{8} 代表的是 0-9 之间任意匹配一个8位的字符。 * five: $ 是以什么结尾。(例如 2$ 代表是以 2结尾的手机号:18811520392) */ let Predicate :NSPredicate = NSPredicate(format: "SELF MATCHES %@","^1[3|4|5|7|8][0-9]d{8}$") return Predicate .evaluateWithObject(dostring); case 1: // 全部小写字母(还可以添加字母的长度限制) /* * ^[a-z]{5}$ * 这个表达式代表 以小写字母开头长度为5的字符 * * ^[a-z]+$ * 这个代表不限制长度的小写字符串 */ let Predicate :NSPredicate = NSPredicate(format: "SELF MATCHES %@","^[a-z]{5}$") return Predicate .evaluateWithObject(dostring); case 2: // 判断用户名(6-16位) /* * AppID 的用户名 * ^[A-Z][a-zA-Z0-9_]{5,15}$ 同于 ^[A-Z]w{5,15}$ * w 等价于 [a-zA-Z0-9_] * 用户名没有限制 * ^w{6,16}$ | ^.{6,16}$ "^w{6,16}$") return Predicate .evaluateWithObject(dostring); case 3: // 身份证 ) return Predicate .evaluateWithObject(dostring); case 4: // 月份 (00 -09 与 10 -12) /* * ^0d|^1[^3-9] * [^3-9] 是代表只能获取 0-2之间的数 "^0d|^1[^3-9]") return Predicate .evaluateWithObject(dostring); default: break } return false; }
func StringCheck(dostring:String,0)"> */ if (dostring.rangeOfString("^1[3|4|5|7|8][0-9]d{8}$",options:.RegularExpressionSearch) != nil){ return true; } case 1: */ if (dostring.rangeOfString("^[a-z]{5}$",options:.RegularExpressionSearch) != nil){ return true; } case 2: */ if (dostring.rangeOfString("^w{6,16}$",options:.RegularExpressionSearch) != nil){ return true; } case 3: // 身份证 if (dostring.rangeOfString("d{14}[0-9xX]{0,4}$",options:.RegularExpressionSearch) != nil){ return true; } case 4: */ if (dostring.rangeOfString("^0d|^1[^3-9]",options:.RegularExpressionSearch) != nil){ return true; } default: break } return false; }
func RegularExpression(dostring:String,0)"> */
// 输出结果 do { // - 1、创建规则 let pattern = "[1-9][0-9]{4,14}" // - 2、创建正则表达式对象 let regex = try NSRegularExpression(pattern: pattern,options: NSRegularExpressionOptions.CaseInsensitive) // - 3、开始匹配 let res = regex.matchesInString(dostring,options: NSMatchingOptions(rawValue: 0),range: NSMakeRange(0,dostring.characters.count)) // 输出结果 if (res.count != 0) { return true } } catch { print(error) }
case 1: */ // 、创建规则 let pattern = "^[a-z]{5}" 输出结果 if (res.count != 0) { return true } } catch { print(error) } case 2: 、创建规则 let pattern = "^w{6,16}$" 输出结果 if (res.count != 0) { return true } } catch { print(error) } case 3: // 身份证 // 、创建规则 let pattern = "d{14}[0-9xX]{0,4}" 输出结果 if (res.count != 0) { return true } } catch { print(error) }
case 4: 、创建规则 let pattern = "^0d|^1[^3-9]" 输出结果 if (res.count != 0) { return true } } catch { print(error) }
default: break } return false; } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |