正则表达式大全深度解析

说明:

这是一个 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]);

ottom:0px; line-height:normal; font-family:Menlo; color:rgb(61,[S RegularExpression:@"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;


其中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} ” mn均为非负整数,其中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 ”匹配xy。例如,“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 {

ottom:0px; font-size:14px; line-height:normal; font-family:Menlo; color:rgb(187,reglaretype: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] 代表是在34578 里面选任意一个数。

* 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}$

ottom:0px; font-size:14px; line-height:normal; font-family:Menlo; color:rgb(0,"^\\w{6,16}$")

return Predicate .evaluateWithObject(dostring);

case 3:

// 身份证

ottom:0px; font-size:14px; line-height:normal; font-family:Menlo; color:rgb(209,"\\d{14}[0-9xX]{0,4}$")

return Predicate .evaluateWithObject(dostring);

case 4:

// 月份 00 -09 10 -12

/*

* ^0\\d|^1[^3-9]

* [^3-9] 是代表只能获取 0-2间的

ottom:0px; font-size:14px; line-height:normal; font-family:Menlo; color:rgb(0,"^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;

}

};

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...