正则表达式

合集下载

常用正则表达式语法大全

常用正则表达式语法大全

正则表达式是一种用于匹配和处理文本的强大工具,可以在很多编程语言和文本编辑器中使用。

以下是一些常用的正则表达式语法:1.字符匹配:–.: 匹配任意单个字符,不包括换行符。

–\w: 匹配任意字母、数字或下划线。

–\d: 匹配任意数字。

–\s: 匹配任意空白字符,包括空格、制表符、换行等。

–[...]: 匹配方括号内的任意字符。

例如,[aeiou]匹配任意一个元音字母。

–[^...]: 匹配除了方括号内字符之外的任意字符。

例如,[^aeiou]匹配任意一个非元音字母。

2.重复匹配:–*: 匹配前一个字符0次或多次。

–+: 匹配前一个字符1次或多次。

–: 匹配前一个字符0次或1次。

–{n}: 匹配前一个字符恰好n次。

–{n,}: 匹配前一个字符至少n次。

–{n,m}: 匹配前一个字符至少n次,最多m次。

3.边界匹配:–^: 匹配字符串的开始位置。

–$: 匹配字符串的结束位置。

–\b: 匹配单词边界,即单词前后的位置。

–\B: 匹配非单词边界的位置。

4.分组和捕获:–(): 将括号内的表达式视为一个分组。

–(?:): 类似于普通分组,但不进行捕获。

–\n: 反向引用,引用第n个分组的内容。

5.特殊字符转义:–\: 转义字符,用于匹配特殊字符本身。

6.修饰符:–i: 忽略大小写。

–g: 全局匹配,不仅匹配第一个结果。

–m: 多行匹配,使^和$匹配每一行的开始和结束。

这里列举了一些常用的正则表达式语法,但实际使用中,还有更多复杂的语法和特性,可以根据具体需求查阅更详细的正则表达式文档和教程。

不同编程语言和文本编辑器对正则表达式的支持也有所不同,所以在实际应用中需要根据具体的环境进行调整。

什么是正则表达式?

什么是正则表达式?

什么是正则表达式?
什么是正则表达式?
正则表达式也称模式表达式,其⾃⾝具有⼀套⾮常完整的、可以编写模式的语法体系,提供了⼀种灵活且直观的字符串处理⽅法。

正则表达式通过构建特定规则的模式,与输⼊的字符串信息⽐较,从⽽实现字符串的匹配、查找、替换及分割等操作。

正则表达式并不是PHP⾃⼰的产物,在很多领域都会见到它的应⽤,除了在perl、C#及Java语⾔中应⽤外,我们的B/S架构软件开发
中,Linux操作系统、前台JavaScript脚本、后台脚本PHP以及MySQL数据库中都可以应⽤到正则表达式。

正则表达式语法概述
正则表达式是⼀种描述字符串结构的语法规则,是⼀个特定的格式化模式,可以匹配、替换、截取匹配的字串。

对于⽤户来说,可能以前接触过DOS,如果相匹配当前⽂件夹下所有的⽂本⽂件,可以输⼊“dir *.txt”命令,按enter键后所有“.txt”⽂件都会被列出来。

这⾥的“*.txt”即可理解为⼀个简单的正则表达式。

PHP⽀持两种风格的正则表达式语法:POSIX和Perl。

这两种风格的正则表达式是PHP编译时的默认风格。

在PHP5.3版本中,Perl风格不能被禁⽤。

POSIX正则表达式更容易掌握,但是他们不是⼆进制安全的。

何时⽤到正则表达式?
到⽬前为⽌,我们进⾏的所有模式匹配都使⽤了字符串函数。

我们只限于进⾏精确匹配,或精确的⼦字符串匹配。

如果希望完成⼀些更负责的模式匹配,应该⽤正则表达式。

正则表达式在开始学习时很难掌握,但是却⾮常有⽤。

常用的正则表达式

常用的正则表达式

常用的正则表达式整理1、非负整数:^\d+$2、正整数:^[0-9]*[1-9][0-9]*$3、非正整数:^((-\d+)|(0+))$4、负整数:^-[0-9]*[1-9][0-9]*$5、整数:^-?\d+$6、非负浮点数:^\d+(\.\d+)?$7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)) $8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$9、负浮点数:^(-((正浮点数正则式)))$10、英文字符串:^[A-Za-z]+$11、英文大写串:^[A-Z]+$12、英文小写串:^[a-z]+$13、英文字符数字串:^[A-Za-z0-9]+$14、英数字加下划线串:^\w+$15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$17、邮政编码:^[1-9]\d{5}$18、中文:^[\u0391-\uFFE5]+$19、电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$ 20、手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$21、双字节字符(包括汉字在内):^\x00-\xff22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)23、匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/>24、匹配空行:\n[\s| ]*\r25、提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?26、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*27、提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)29、提取信息中的中国手机号码:(86)*0*13\d{9}30、提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}31、提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}32、提取信息中的中国邮政编码:[1-9]{1}(\d+){5}33、提取信息中的浮点数(即小数):(-?\d*)\.?\d+34、提取信息中的任何数字:(-?\d*)(\.\d+)?35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)36、电话区号:/^0\d{2,3}$/37、腾讯QQ号:^[1-9]*[1-9][0-9]*$38、帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$匹配中文字符的正则表达式:[\u4e00-\u9fa5]匹配双字节字符(包括汉字在内):[^\x00-\xff]匹配空行的正则表达式:\n[\s| ]*\r匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正则表达式:(^\s*)|(\s*$)匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S *)?$匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$下表是元字符及其在正则表达式上下文中的行为的一个完整列表:\将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。

正则表达式150种表达方式

正则表达式150种表达方式

正则表达式150种表达方式1、删除所有数字。

只要查找:\d就OK。

为了不留空行:替换处:\d2、删除所有英文字母。

只要查找:\a就OK。

为了不留空行:替换处:\d3、删除除换行符以外的所有。

只要查找:. 为了不留空行:替换处:\d4、既删除英文字母又删除数字。

只要查找:\w。

为了不留空行:替换处:\d5、删除数字加字母加等于(如:3a=或3zz=)只要查找:\d+\a+\=。

为了不留空行:替换处:\d6、删除换行。

只要查找:$。

替换处:\d(还原查找:\a+=\f。

替换:\0\n)。

如在换行后加一空格,查找:(\a)$。

替换:\0 \d。

7、删除空行只要查找:^$。

为了不留空行:替换处:\d8、删除首尾空格。

只要查找:^\s*|\s*$就OK9、删除行前数字及顿号。

只要查找:\d+、替换为空10、删除末尾标点符号。

只要查找:\P+$|\P+\s+$,“|”前面是没有空格的,“|”后面有空格,P后的加是为了……而用的。

11、删除末尾空格。

只要查找:\s+$。

替换为空。

12、删除第一个字如:“的我们”中的“的”只要查找:^\的。

13、删除第几个字。

查找:查找:^().(.+)。

替换:\1\2。

去掉前面的拼音:查找:^\a+替换为空。

第一个括号里可加“.”且可变。

14、删含的。

查:.*的.*替:\d。

的头查:.*=的.*替:\d。

的尾查:\a.*\c.*的$替:\d(留它不匹配)●删非的行查:^[^的]+$替:\d15、删除几码以上的码查:^(...)...替:\1。

删第几位码。

查:^(...).(.+)替:\1\2(变成\1,\2则其位则改成,了)首括号的.可变。

16、删除各类型的几字词,但必须是码前词后或纯词。

三字词:查找:^\~f{}\f{3}$替换:\d。

替换:\d “3”可以改。

17、删除11字词及其以上的词条查找(自定义格式):\a{}\=(\c|\P|\p){11,}。

替换:\d。

11可改。

正则表达式公式大全

正则表达式公式大全

正则表达式公式大全正则表达式是一种处理字符串的强大工具,它可以帮助我们快速、高效地匹配、替换、删除、提取字符串。

很多编程语言,包括Python、Java、JavaScript等都支持正则表达式,所以掌握正则表达式是非常重要的。

下面是一些常用的正则表达式公式:1. 匹配单个字符:(1).点号(.)表示匹配任何单个字符,除了换行符。

(2)\d表示数字,等价于[0-9]。

(3)\D表示非数字,等价于[^0-9]。

(4)\w表示字符,包括数字、字母和下划线,等价于[a-zA-Z0-9_]。

(5)\W表示非字符,等价于[^a-zA-Z0-9_]。

(6)\s表示空白字符,包括空格、制表符、换行符等。

(7)\S表示非空白字符。

2. 匹配重复字符:(1)*表示重复0次或更多次。

(2)+表示重复1次或更多次。

(3)?表示重复0次或1次。

(4){n}表示重复n次。

(5){n,}表示重复n次或更多次。

(6){n,m}表示重复n到m次。

3. 匹配位置:(1)^表示匹配开头位置。

(2)$表示匹配结尾位置。

(3)\b表示匹配单词边界。

(4)\B表示匹配非单词边界。

4. 匹配分组:(1)( )表示一个分组。

(2)\1、\2、\3等表示对之前的分组的引用。

(3)(?: )表示一个非捕获分组。

5. 匹配字符集:(1)[ ]表示一个字符集,例如[abc]表示匹配a、b、c中的任意一个字符。

(2)[^ ]表示一个否定字符集,例如[^abc]表示匹配除了a、b、c以外的任意一个字符。

(3)[a-z]表示一个范围,表示匹配a至z中的任意一个字母。

6. 匹配转义字符:(1)\表示转义字符,例如\\.表示匹配点号。

(2)\n表示匹配换行符。

(3)\r表示匹配回车符。

(4)\t表示匹配制表符。

(5)\xx表示匹配十六进制字符。

以上是一些常用的正则表达式公式,如果我们能够熟练掌握这些公式,就可以很好地应用正则表达式来处理字符串。

当然,对于不同编程语言来说,对于正则表达式的支持也会有所不同,所以需要我们在实际应用中注意区别。

常用正则式

常用正则式
60. (pattern) 匹配pattern 并获取这一匹配。
61.
62. (?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
63.
64. (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
119.
120. 匹配双字节字符(包括汉字在内):[^x00-xff]
121.
122. 匹配空行的正则表达式:n[s| ]*r
123.
124. 匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/
125.
126. 匹配首尾空格的正则表达式:(^s*)|(s*$)
75.
76. [^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。
77.
78. \b 匹配一个单词边界,也就是指单词和空格间的位置。
79.
80. \B 匹配非单词边界。
81.
82. \cx 匹配由x指明的控制字符。
83.
36.
37. 元字符及其在正则表达式上下文中的行为:
38.
39. \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。
40.
41. ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。
91.
92. \r 匹配一个回车符。等价于 \x0d 和 \cM。

正则表达式

正则表达式

正则表达式(I)正则表达式是由英文词语regular expression翻译过来的,就是符合某种规则的表达式。

正则表达式在软件开发中应用非常广泛,例如,找出网页中的超链接,找出网页中的email 地址,找出网页中的手机号码,判断输入的内容是否全部是数字,是否满足某种日期格式等等。

可以将正则表达式理解为一种对文字进行模糊匹配的语言,它用一些特殊的符号(称为元字符)来代表具有某种特征的一组字符以及该组字符重复出现的次数。

例如,对于正则表达式“\d{5}(-\d{4})?”,\d就是一个元字符,它表示一个数字字,{5}表示紧靠它前面的元素项连续重复5次,\d和{5}的组合\d{5}就表示匹配任意连续的5个数字字符;-\d{4}匹配的是一个连字号(-)后加上4个任意的数字,(-\d{4})?表示连字号(-)和后面的4个数字可有可无。

对于整个正则表达式“\d{5}(-\d{4})?”,表示要么是5个连续的数字字符,要么是5个连续的数字后加上一个连字号(-)、再加上4个连续的数字组成的10个字符。

正则表达式中的圆括号除了能将多个元素组合成一个可统一操作的组合项外,它所括起来的表达式部分还成为了一个子匹配(也叫子表达式),也就是说,我们可以用圆括号在一个长的正则表达式中划分出子表达式。

这样,除了可以得到整个正则表达式的匹配结果外,还可以单独得到每个子表达式部分所匹配的结果。

要灵活运用正则表达式,必须了解其中各种元字符的功能。

元字符从功能上大致分为:限定符、选择匹配符、分组组合和反向引用符、特殊字符、字符匹配符、定位符。

限定符用于指定其前面的字符或组合项连续出现多少次,下面是各种限定符及其含义:●{n} 规定前面的元素或组合项的连续出现n 次●{n,} 规定前面的元素或组合项至少连续出现n 次●{n,m } 规定前面的元素或组合项至少连续出现n 次,至多连续出现m 次●+ 规定前面的元素或组合项必须出现一次或连续多次,等效于{1,}●* 规定前面的元素或组合项可以出现零次或连续多次,等效于{0,}●? 规定前面的元素或组合项出现零次或一次,等效于{0,1}默认情况下,正则表达式使用最长(也叫贪婪)匹配原则。

20个常用的正则表达式 单字母

20个常用的正则表达式 单字母

正则表达式(Regular Expression)是一种用于匹配字符串的强大工具。

它通过使用特定的符号和字符来描述和匹配一系列字符串,能够满足我们在处理文本时的各种需求。

在这篇文章中,我们将深入探讨20个常用的单字母正则表达式,并通过实例来展示它们的使用方法。

1. \b在正则表达式中,\b表示单词的边界。

它可以用来匹配单词的开头或结尾,用于查找特定单词而不是单词的一部分。

2. \d\d表示任意一个数字字符。

它可以用来匹配任何数字,例如\d+可以匹配一个或多个数字字符。

3. \w\w表示任意一个字母、数字或下划线字符。

它可以用来匹配单词字符,例如\w+可以匹配一个或多个单词字符。

4. \s\s表示任意一个空白字符,包括空格、制表符、换行符等。

它可以用来匹配空白字符,例如\s+可以匹配一个或多个空白字符。

5. \.\.表示匹配任意一个字符,包括标点符号和空格等。

它可以用来匹配任意字符,例如\.可以匹配任意一个字符。

6. \A\A表示匹配字符串的开始。

它可以用来确保匹配发生在字符串的开头。

7. \Z\Z表示匹配字符串的结束。

它可以用来确保匹配发生在字符串的结尾。

8. \b\b表示单词的边界。

它可以用来匹配单词的开头或结尾,用于查找特定单词而不是单词的一部分。

9. \D\D表示任意一个非数字字符。

它可以用来匹配任何非数字字符。

10. \W\W表示任意一个非单词字符。

它可以用来匹配任何非单词字符。

11. \S\S表示任意一个非空白字符。

它可以用来匹配任何非空白字符。

12. \[\[表示匹配方括号。

它可以用来匹配包含在方括号内的字符。

13. \]\]表示匹配方括号。

它可以用来匹配包含在方括号内的字符。

14. \(\(表示匹配左括号。

它可以用来匹配包含在左括号内的字符。

15. \)\)表示匹配右括号。

它可以用来匹配包含在右括号内的字符。

16. \{\{表示匹配左花括号。

它可以用来匹配包含在左花括号内的字符。

17. \}\}表示匹配右花括号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

正则表达式Regular Expression2016 1 4正则表达式:是对字符串操作的⼀种逻辑公式,就是⽤事先定义好的⼀些特定字符、及这些特定字符的组合,组成⼀个’规则的字符串’,这个’规则字符串’⽤来对字符串的⼀种过滤逻辑。

OC1.NSString带有options选项的⼀般都⽀持正则表达式特点:只匹配第⼀个,可指定是否区分⼤⼩写。

可替换字符串。

2.NSRegularExpression类特点:能匹配多个结果,替换内容等,它是OC中实现正则表达式功能最全⾯的类3.NSPredicate类的matches命令特点:重在检索数据3个类⽤的都是ICU(international components for unicode)NSString的options选项//是否以某字符串开头,不区分⼤⼩写,当前语⾔环境NSLog(@"localeIdentifier:%@", [NSLocale currentLocale].localeIdentifier);///<当前环境en_USNSString *str = @"qwer.我们com123";//以英⽂字母开头//NSRegularExpressionSearch 只能和 NSAnchoredSearch(以某字符串开头)/NSCaseInsensitiveSearch(忽略⼤⼩写)选项配合使⽤,其它选项⽆效;//如果不使⽤NSRegularExpressionSearch时, NSAnchoredSearch可配合 NSBackwardsSearch//locale是NSLocale对象, 代理语⾔环境, NSString是处理字符串的, 区分语⾔环境是可以理解的.NSRange range = [str rangeOfString:@"[a-z]" options:NSRegularExpressionSearch | NSCaseInsensitiveSearch | NSAnchoredSearch range:NSMakeRange(0, [str length]) locale:[NSLocale currentLocale]];NSLog(@"en_US Range:%@", NSStringFromRange(range));//使⽤中⽂环境,结果相同NSRange range0 = [str rangeOfString:@"[a-z]" options:NSRegularExpressionSearch | NSCaseInsensitiveSearch | NSAnchoredSearch range:NSMakeRange(0, [str length]) locale:[NSLocale localeWithLocaleIdentifier:@"zh_CN"]];NSLog(@"zh_CN Range:%@", NSStringFromRange(range0));//断⾔、检索、替换BOOL exist = range0.location != NSNotFound;if (exist) {NSString *subString = [str substringWithRange:range0];NSString *newString = [str stringByReplacingCharactersInRange:range0 withString:@"_ReplaceString_"];NSLog(@"\n断⾔:%@, \n检索:%@, \n替换结果:%@", exist?@"true":@"false", subString, newString);} else {NSLog(@"不是以字母开头");}打印结果:localeIdentifier:en_USen_US Range:{0, 1}zh_CN Range:{0, 1}断⾔:true,检索:q,替换结果:_ReplaceString_wer.我们com123NSRegularExpression类//optionstypedef NS_OPTIONS(NSUInteger, NSMatchingOptions) {NSMatchingReportProgress = 1<<0, // block NSMatchingReportCompletion = 1 << 1, // block NSMatchingAnchored = 1 << 2, // NSMatchingWithT ransparentBounds = 1 << 3, // NSMatchingWithoutAnchoringBounds = 1 << 4// ^ $};//enumerateMatchesInString block flagstypedef NS_OPTIONS(NSUInteger, NSMatchingFlags) {NSMatchingProgress = 1 << 0, //NSMatchingCompleted = 1 << 1, //NSMatchingHitEnd = 1 << 2, //NSMatchingRequiredEnd = 1 << 3, // NSMatchingInternalError = 1 << 4//};使⽤正则搜索字符串//使⽤block获得第⼀个匹配对象的range,迭代每次计算过程– enumerateMatchesInString:options:range:usingBlock://返回匹配数据:matches中存有所有匹配的结果的range{49, 2}{52, 2}{58, 2}– matchesInString:options:range://匹配总数:在给定范围的字符串中,匹配到的个数– numberOfMatchesInString:options:range://匹配第⼀个,不过返回的是NSTextCheckingResult//该类能:检测到匹配类型,如URL/⼿机号等//match中存有第⼀个匹配的结果的range– firstMatchInString:options:range://匹配第⼀个:得到第⼀个匹配的词的内容(ac)– rangeOfFirstMatchInString:options:range:搜索A://⽰例字符串NSString *exampleString = @"Hello, everybody. Today I wanna have a speech.DA ac AC Ca aD";//正则表达式NSError *error = NULL;NSString *pattern = @"\\b(a|b)(c|d)\\b";NSRegularExpression *rex = [NSRegularExpression regularExpressionWithPattern:patternoptions:NSRegularExpressionCaseInsensitive error:&error]; //默认使⽤NSRegularExpression *rex1 = [[NSRegularExpression alloc] initWithPattern:patternoptions:NSRegularExpressionCaseInsensitive error:&error];//在给定范围的字符串中,匹配到的个数NSUInteger numberOfMatches = [rex numberOfMatchesInString:exampleString options:0 range:NSMakeRange(0, [exampleString length])];NSLog(@"%lu", (unsigned long)numberOfMatches);//得到第⼀个匹配的词的内容(ac)NSRange rangeOfFirstMatch = [rex rangeOfFirstMatchInString:exampleString options:0 range:NSMakeRange(0, [exampleString length])];if(!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0))) {NSString *subStringForFirstMatch = [exampleString substringWithRange:rangeOfFirstMatch];NSLog(@"subStringForFirstMatch:%@", subStringForFirstMatch);} else {NSLog(@"%ld", (long)NSNotFound);}搜索B://matches中存有所有匹配的结果的range{49, 2}{52, 2}{58, 2}NSArray *matches = [rex matchesInString:exampleString options:0 range:NSMakeRange(0, [exampleString length])];NSLog(@"NSArray:%@", matches);for (NSTextCheckingResult *match in matches) {NSRange matchRange = [match range];NSLog(@"matchesInString:%lu,%lu", (unsigned long)matchRange.length, (unsigned long)matchRange.location);}//match中存有第⼀个匹配的结果的rangeNSTextCheckingResult *match = [rex firstMatchInString:exampleString options:0 range:NSMakeRange(0, [exampleString length])];if (match) {NSRange matchRange = [match range];NSLog(@"%lu,%lu", matchRange.location, matchRange.length);}//使⽤block获得第⼀个匹配对象的range,block执⾏次数为匹配个数__block NSUInteger count = 0;[rex enumerateMatchesInString:exampleString options:0 range:NSMakeRange(0, [exampleString length]) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {NSRange matchRange = [match range];NSLog(@"Block:%lu, %lu", matchRange.location, matchRange.length);if (++count >= 100) *stop = YES;}];使⽤正则替换字符串//使⽤Template替换匹配到的字符串返回替换后的字符串,源字符串不变// $0 representing the contents of the overall matched range, $1 representing the contents of the first capture group- stringByReplacingMatchesInString:options:range:withTemplate://直接在源字符串替换,返回NSUInteger类型,获得替换的次数– replaceMatchesInString:options:range:withTemplate://在string中查找由result+offset指定的字符串,返回template指定的字符串(⽐如$0-9)- replacementStringForResult:inString:offset:template:替换A://正则表达式NSError *error = NULL;NSString *pattern = @"\\b(a|b)(c|d)\\b";NSRegularExpression *rex = [[NSRegularExpression alloc] initWithPattern:patternoptions:NSRegularExpressionCaseInsensitive error:&error];//使⽤模版替换字符串// $0 representing the contents of the overall matched range, $1 representing the contents of the first capture groupNSString *modifiedString = [rex stringByReplacingMatchesInString:exampleString options:0 range:NSMakeRange(0, [exampleString length]) withTemplate:@"$0.$1.$2.$0"];NSString *modifiedString1 = [rex stringByReplacingMatchesInString:exampleString options:0 range:NSMakeRange(0, [exampleString length]) withTemplate:@“7"];//得到替换的次数,源字符串被替换,这⾥的源字符串是NSMutableStringNSUInteger count = [rex replaceMatchesInString:[NSMutableString stringWithString:exampleString] options:0range:NSMakeRange(0, 54) withTemplate:@"1"];NSLog(@"count:%lu", (unsigned long)count);替换B://正则表达式NSError *error = NULL;NSString *pattern = @"\\b(a|b)(c|d)\\b";NSRegularExpression *rex = [[NSRegularExpression alloc] initWithPattern:patternoptions:NSRegularExpressionCaseInsensitive error:&error];//直接在源字符串⾥替换NSMutableString *s1 = [NSMutableString stringWithString:exampleString];NSUInteger count = [rex replaceMatchesInString:s1 options:0 range:NSMakeRange(0, 54) withTemplate:@"1"];NSLog(@"%@", s1);NSLog(@"count:%lu", (unsigned long)count);// 在 string 中查找由 result + offset 指定的字符串, 返回 template 指定的字符串(⽐如$0-9等);NSTextCheckingResult *TCResult = [rex firstMatchInString:exampleString options:0 range:NSMakeRange(0, [exampleString length])];NSString *mulString = [rex replacementStringForResult:TCResult inString:exampleString offset:0 template:@"$0_$1_$2"];使⽤正则转义//获得加⼊反义字符的替换模版+ escapedTemplateForString://获得转义后的pattern+escapedPatternForString:转义//⽰例字符串NSString *exampleString = @"Hello, everybody. Today I wanna have a speech.DA ac AC Ca aD";//获得转义后的模版NSString *TemString = [NSRegularExpression escapedTemplateForString:@"__(?.ee])__"];NSLog(@"TemString:%@", TemString);//获得转义后的PatternNSString *patString = [NSRegularExpression escapedPatternForString:@".DA"];NSLog(@"patString:%@", patString);NSRegularExpression *rex0 = [NSRegularExpression regularExpressionWithPattern:patStringoptions:NSRegularExpressionCaseInsensitive error:nil];NSLog(@"Model:%@", exampleString);NSLog(@"AfterRepalcing:%@", [rex0 stringByReplacingMatchesInString:exampleString options:0 range:NSMakeRange(0, [exampleString length]) withTemplate:TemString]); //查找数组中包含单词最多的元素,单词以空格分隔.NSArray *words = @[@"a bc ccc", @" a b aabb e", @"hello"];__block int maxCount = 0;__block int index = 0;NSString *pattern = [NSRegularExpression escapedPatternForString:@"\\s*\\w+\\s*"];NSLog(@"pattern:%@", pattern);[words enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {NSRegularExpression *rex = [NSRegularExpression regularExpressionWithPattern:@"\\s*\\w+\\s*"options:NSRegularExpressionCaseInsensitive error:nil];NSArray *result = [rex matchesInString:obj options:0 range:NSMakeRange(0, [obj length])];if (maxCount < result.count) {maxCount = (int)result.count;index = (int)idx;}}];NSLog(@"maxCount:%d, words[%d] = %@", maxCount, index, words[index]);匹配到每⼀个单词:@"\\s*\\w+\\s*NSPredicate类的matches命令//给定⼀个字符串NSString *email = @“silence-m.e@";//邮箱的正则表达式NSString *rex = @“^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$";//使⽤谓词进⾏匹配NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self matches %@", rex];//查看是否匹配BOOL isValid = [predicate evaluateWithObject:email];NSLog(@"%d", isValid);Special Characters 特殊字符* ? + [ () {} ^ $ | \ . /正则表达式中的保留字,这些字符被⽤作⾼级匹配模式。

相关文档
最新文档