说明:
这是一个 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]);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
@H_502_220@ // Dispose of any resources that can be recreated.}
@end
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”。
“ . ”点匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。
“ 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)
/*
* ^0\\d|^1[^3-9]
* [^3-9] 是代表只能获取 0-2之间的数
"^0\\d|^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("^0\\d|^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 = "^0\\d|^1[^3-9]"
输出结果
if (res.count != 0) {
return true
}
}
catch {
print(error)
}
default:
break
}
return false;
}
};
原文链接:https://www.f2er.com/regex/359282.html