ios 中需要使用NSRegularExpression类,NSTextCheckingResult类。

下面给出最基本的实现代码

 NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(a.*)(b)" options:NSRegularExpressionCaseInsensitive error:nil];

    __block NSUInteger count = ;
NSString *string = @" ab ab ab ";
[regex enumerateMatchesInString:string options: range:NSMakeRange(, [string length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
NSLog(@"---------------------------find one match!"); NSRange matchRange = [match range];
NSRange firstHalfRange = [match rangeAtIndex:];
NSRange secondHalfRange = [match rangeAtIndex:]; NSLog(@"the string is %@",[string substringWithRange:matchRange]);
NSLog(@"firstHalfRange is %@",[string substringWithRange:firstHalfRange]);
NSLog(@"secondHalfRange is %@",[string substringWithRange:secondHalfRange]); if (++count >= ) *stop = YES;
}];

它的结果如下

这里每个rang的含义如下,matchRange表示找到的每个匹配串的总体位置,firstHalfRange则表示第一个表达式(a.*)的匹配范围,当然这个范围是总范围的一部分。关于为什么匹配到 "ab   ab     ab" 而不是 ab,这根据系统的处理方法而定,可能有方法进行设定,没有研究过。

如果仅仅想处理第一个匹配的结果,那么可以使用以下的代码,这种比较常用

NSTextCheckingResult *match = [regex firstMatchInString:string
options:
range:NSMakeRange(, [string
length])];
if (match) {
NSRange matchRange = [match range];
NSRange firstHalfRange = [match rangeAtIndex:];
NSRange secondHalfRange = [match rangeAtIndex:];
} }

需要注意, ios的字符串由于存在转义字符\, 所以 \b  要写成 \\b,  还有当需要使用+ .  这种已经被定义为特殊含义的符号时, 也需要进行转义 \\+   \\.

正则表达式中*的使用小注意

今天要匹配"/Date(1407785755000)/"中的数字,我用了"\\d*" ,之后匹配到了结果,但是结果的range是(0,0)。其实,应该使用

"\\d+",以后单独使用*时要多多注意,*可以代表0个,所以就是"\\d*"可以代表空字符串。

正则表达式里"-"中划线的使用注意

今天要匹配正则表达式,把非法的字符找出来,开始的写法是这个

[^A-Za-z0-9_.*-+%!],我的目的是把_.*-+%!这7个字符算合法字符,但是发现有许多其他字符也合法了,原来是中划线的位置不对,应该这样写

[^A-Za-z0-9_.*+%!-],在中间放的中划线会被识别为连接符,表示一个范围。


Android中需要使用Pattern 和Matcher2个类,其实和ios的基本思路是一致的!

 String patternStr = "[0-9:]*";

 Pattern p = Pattern.compile(patternStr);

 Matcher m = p.matcher(originalStr);

 if (m.find()) {
returnStr = m.group();
}

iOS 和Android中的正则表达式简单使用的更多相关文章

  1. [原创]Android中LocationManager的简单使用,获取当前位置

    Android中LocationManager的提供了一系列方法来地理位置相关的问题,包括查询上一个已知位置:注册/注销来自某个 LocationProvider的周期性的位置更新:以及注册/注销接近 ...

  2. iOS 和 Android 中的Alert

    iOS 和 Android中都有alert这种提示框,下面简单介绍下. ios中的alert叫做UIAlertView,共有4种样式,由于在ios7上,自定义alertview不太好用,所以也就这4种 ...

  3. android中的回调简单认识

    首先说一下最抽象的形式--2个类,A类和B类.A类含有1个接口.1个接口变量.(可能含有)1个为接口变量赋值的方法以及1个会使用接口变量的"地方";B类实现A中的接口,(可能)含有 ...

  4. iOS 和Android中的基本日期处理

    提到日期处理,主要有2个参数,一个是所在的时区,一个是所用的日历方法. 主要涉及2大类问题,一类是日期类型和字符串之间的转化,另一类是日期的计算问题.ios和android都提供了相应的类来处理问题. ...

  5. iOS 和 Android 中的后台运行问题

    后台机制的不同,算是iOS 和 Android的一大区别了,最近发布的iOS7又对后台处理做了一定的更改,找时间总结一下编码上的区别,先做个记录. 先看看iOS的把,首先需要仔细阅读一下Apple的官 ...

  6. Android中ProgressDialog的简单示例

    网上一般对进度条的示例都是如何显示,没有在任务结束如何关闭的文章,参考其他文章经过试验之后把整套进度条显示的简单示例如下: 建立android工程等工作都略去,Google一下就可以了. 下面来介绍主 ...

  7. UltraEdit中使用正则表达式-简单用法

    UltraEdit中使用正则表达式 1.认识正则表达式语法: 正则表达式 (UltraEdit Syntax): % 匹配行首 - 表明要搜索的字符串一定在行首. $ 匹配行尾 - 表明要搜索的字符串 ...

  8. Android中SharePreferences的简单实现

    Android中提供SharePreferences这种轻量级的数据存储模式,这种模式能够存储少量数据,并能为自身和其他应用提供数据接口.相对于其他数据存储方式,SharePreferences更加轻 ...

  9. Android中实现一个简单的逐帧动画(附代码下载)

    场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...

随机推荐

  1. SP*

    1.PS1——默认提示符 root@tcx2250-14:/etc# echo $PS1\u@\h:\w\$ \u是用户名 \h是主机名 \w是当前目录的完整路径.请注意当你在主目录下的时候,如上面所 ...

  2. druid(德鲁伊)数据源的使用和配置 阿里出品

    pom.xml <dependency>     <groupId>com.alibaba</groupId>     <artifactId>drui ...

  3. 【kAri OJ】621. 廖神的树

    时间限制 3000 ms 内存限制 65536 KB 题目描述 廖神和男神在植树节的时候准备玩一个奇怪的游戏,他们现在有一个被分割成n*n个格子的矩形土地,他们现在准备往这个地里种树,但这个种树游戏必 ...

  4. 直接运行可执行文件linux终端一闪而过

    运行elasticsearch的时候进入bin目录,ela 然后tab提示的内容中没有e..s..,很奇怪,然后我直接双击运行es,终端一闪而过,我就手动打开终端, ./elasticsearch 这 ...

  5. newinstance和new有什么区别

    用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩.可扩展,可重用等软件思想上解释了.Java中工厂模式经 ...

  6. UVA1635 Irrelevant Elements(唯一分解定理 + 组合数递推)

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51196 紫书P320; 题意:给定n个数a1,a2····an,依次求出相邻 ...

  7. ECSHOP验证码背景图修改教程

    ECSHOP验证码背景图修改教程 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2013-11-18   ECSHOP验证码背景图修改教程: ECSHOP前后台的某些地 ...

  8. route工具

    route工具 route工具主要用来查看或修改内核路由表. 1.查看内核路由表 route [-nee] 参数说明: -n:不要使用协议或主机名称,直接使用 IP 或 port number:-ee ...

  9. jar包与lib包的区别

    jar包是编译时使用,假如编译出错代码没问题一定是jar包的问题,lib是运行时使用,比如程序启动后出错了但是编译没有问题,就可能是lib出错了,不会是jar包的问题.

  10. 移动端Web开发注意点

    不用考虑浏览器兼容性 移动端开发主要对象是手持设备,其中绝大部分是IOS和Android系统,so,在开发此类页面时不必纠结IE和其他一些2B浏览器的兼容性,webkit是本次开发重点. 当然,不同版 ...