美文网首页
正则表达式封装

正则表达式封装

作者: 闲得一B | 来源:发表于2016-06-24 11:45 被阅读260次
默认需求如下:

后台发送过来的原文本:
xxxxxx[a:b]xxxxxx
客户端显示出来的文本:
xxxxxxaxxxxxx
客户端读出来的文本:
xxxxxxbxxxxxx

示例:
后台发送过来的原文本:
剩余3分以[666:六六六]的形式发送给你

客户端显示出来的文本:
剩余3分以666的形式发送给你

客户端读出来的文本:
剩余3分以六六六的形式发送给你

所以设置默认三个规则如下:
规则一:@"\[.?\]"
规则二:@"\[.
?\:"
规则三: @"\:.*?\]"
如果[]中间没有:号也不需要匹配


---
#####.h文件

// Copyright © 2016年 XDYB. All rights reserved.
//

import <Foundation/Foundation.h>

@interface PatternString : NSObject

/**
*根据默认规则生成字符串
*比如:将[666:六六六]正则后,数组第一个元素是666,第二个元素是六六六
*/
+(NSMutableArray *)PatternString:(NSString *)string;

/**
*参数一:需要正则的字符串
*参数二:正则一
*参数三:正则二
*参数四:正则三
*/

  • (NSMutableArray<NSTextCheckingResult *> *)matchesInStringAllFit:(NSString *)string entirePattern:(NSString *)entirePattern firstPattern:(NSString *)firstPattern lastPattern:(NSString *)lastPattern;

/**
*根据字符串判断是否需要正则
*/

  • (BOOL)isPatternString:(NSString *)string;

/**
*根据自定的正则判断是否需要正则
*/

  • (BOOL)formerlyString:(NSString *)string regularExpressionWithPattern:(NSString *)pattern;

@end


#####.m文件

// Copyright © 2016年 XDYB. All rights reserved.
//

import "PatternString.h"

@implementation PatternString

//包含默认正则表达式
+(NSMutableArray )PatternString:(NSString )string
{
NSMutableArray array = [PatternString matchesInStringAllFit:string entirePattern:@"\[.?\]" firstPattern:@"\[.
?\:" lastPattern:@"\:.
?\]"];
return array;
}

//提供默认规则,判断是否需要正则匹配

  • (BOOL)isPatternString:(NSString )string
    {
    return [self formerlyString:string regularExpressionWithPattern:@"\[.
    ?\]"];
    }

//提供方法实现,判断是否需要正则匹配

  • (BOOL)formerlyString:(NSString *)string regularExpressionWithPattern:(NSString *)pattern{

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
    //返回结果里包含区间
    NSArray *arr = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];
    return arr.count;
    }

//根据规则生成结果包含的区间

  • (NSMutableArray<NSTextCheckingResult *> *)matchesInStringAllFit:(NSString *)string entirePattern:(NSString *)entirePattern firstPattern:(NSString *)firstPattern lastPattern:(NSString *)lastPattern
    {

    //字符串所在的范围
    NSRange rangeStr;

    //得到匹配结果
    NSTextCheckingResult * rsult;

    //保留每次正则后的数据
    NSMutableArray *array = [NSMutableArray arrayWithObject:string];
    [array addObject:string];

    // 创建正则表达式对象
    // 规则
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:entirePattern options:NSRegularExpressionCaseInsensitive error:nil];

    //返回结果里包含区间
    NSArray *arr = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];
    //遍历结果数组
    NSUInteger count = arr.count;
    int i = 2;

    while (i > 0) {
    i = i- 1;

      while (count > 0) {
          //得到匹配结果
          rsult =  arr[--count];
          rangeStr  = rsult.range;
          NSArray *arrayFirst =  [self matchesInString:array.firstObject entirePattern:entirePattern firstPattern:firstPattern lastPattern:lastPattern];
          [array replaceObjectAtIndex:0 withObject:arrayFirst.firstObject];
          
          NSArray *arrayLast =  [self matchesInString:array.lastObject entirePattern:entirePattern firstPattern:firstPattern lastPattern:lastPattern];
          [array replaceObjectAtIndex:1 withObject:arrayLast.lastObject];
      }
    

    }

    return array;
    }

//根据规则返回存放 后两种规则处理过的 数组字符串

  • (NSArray *)matchesInString:(NSString *)string entirePattern:(NSString *)entirePattern firstPattern:(NSString *)firstPattern lastPattern:(NSString *)lastPattern
    {

    //定义规则
    //规则1 ------[]-------
    // NSString pattern1 = @"\[.?\]";
    NSString *pattern1 = entirePattern;
    NSString *pattern1String = [self matchesInString:string regularExpressionWithPattern:entirePattern];
    //规则2 ------[:-------
    // NSString pattern2 = @"\[.?\:";
    NSString *pattern2String = [self matchesInString:pattern1String regularExpressionWithPattern:firstPattern];
    //规则3 ------:]-------
    // NSString pattern3 = @"\:.?\]";
    NSString *pattern3String = [self matchesInString:pattern1String regularExpressionWithPattern:lastPattern];

//规则结果1
NSString *patternHeadStr = [self stringByReplacingString:pattern2String withReplacingFirstPatternString:@"" withReplacingLastPatternString:@""];
//规则结果2
NSString *patternTailStr = [self stringByReplacingString:pattern3String withReplacingFirstPatternString:@"" withReplacingLastPatternString:@""];

if(patternHeadStr == nil || patternTailStr == nil)//如果中括号中间没有:号直接返回
{
    return @[string,string];
}

//最终结果
NSString *finallyHeadString =  [self matchesInString:string regularExpressionWithPattern:pattern1 stringByReplacingOccurrencesWithString:patternHeadStr];

NSString *finallyTailString =  [self matchesInString:string regularExpressionWithPattern:pattern1 stringByReplacingOccurrencesWithString:patternTailStr];

return @[finallyHeadString,finallyTailString];

}

//将规则字符串的首尾替换

  • (NSString *)stringByReplacingString:(NSString *)str withReplacingFirstPatternString:(NSString *)firstReplacement withReplacingLastPatternString:(NSString *)lastReplacement
    {
    NSRange range = NSMakeRange(0, 1);
    str = [str stringByReplacingCharactersInRange:range withString:firstReplacement];
    NSRange range1 = NSMakeRange(str.length - 1, 1);
    str = [str stringByReplacingCharactersInRange:range1 withString:lastReplacement];
    return str;
    }

//根据规则生成一个截取到的规则字符串

  • (NSString *)matchesInString:(NSString *)string regularExpressionWithPattern:pattern
    {
    //字符串所在的范围
    NSRange rangeStr;

    //匹配的字符串
    NSString *matchesInStr;

    //得到匹配结果
    NSTextCheckingResult * rsult;
    // 创建正则表达式对象
    // 规则
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
    //返回结果里包含区间
    NSArray *arr = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];
    //遍历结果数组
    NSUInteger count = arr.count;
    while (count > 0) {
    //得到匹配结果
    rsult = arr[--count];
    rangeStr = rsult.range;
    //得到匹配字符串
    matchesInStr = [string substringWithRange:rangeStr];;
    }

    return matchesInStr;
    }

//根据规则生成一个替换的字符串

  • (NSString *)matchesInString:(NSString *)string regularExpressionWithPattern:(NSString *)pattern stringByReplacingOccurrencesWithString:(NSString *)replacement
    {

    NSString *replacingStr;

    //字符串所在的范围
    NSRange rangeStr;

    //匹配的字符串
    NSString *matchesInStr;

    //得到匹配结果
    NSTextCheckingResult * rsult;

    // 创建正则表达式对象
    // 规则
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
    //返回结果里包含区间
    NSArray *arr = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];

    //遍历结果数组
    NSUInteger count = arr.count;
    while (count > 0) {
    //得到匹配结果
    rsult = arr[--count];
    rangeStr = rsult.range;
    //得到匹配字符串
    matchesInStr = [string substringWithRange:rangeStr];
    //将得到的字符串的位置替换为X
    replacingStr = [string stringByReplacingOccurrencesOfString:matchesInStr withString:replacement];
    }

    return replacingStr;
    }
    @end

相关文章

  • Swift Regex

    Swift 对正则表达式的封装

  • RegExp

    RegExp——封装一条正则表达式,并提供正则表达式执行验证和查找的API 我们需要在何时去使用这个API呢?大致...

  • 二十二天,RegExp

    什么是:封装一条正则表达式,提供使用该正则表达式执行检验和查找的API。 何时:1:既查找每个关键词...

  • python网络爬虫抓取网站图片

    本文介绍两种爬取方式: 1.正则表达式 2.bs4解析Html 以下为正则表达式爬虫,面向对象封装后的代码如下: ...

  • swift 自定义正则表达式运算符 =~

    swift 至今并没有在语言层面上支持正则表达式,可能在开发app时正则表达式使用的场景并不多。 封装 在 Coc...

  • JS部分

    原生JS 事件(冒泡、捕获) 变量、作用域 函数 对象 面向对象OOP(闭包、封装、继承) 正则表达式 Ajax(...

  • 正则表达式封装

    默认需求如下: 后台发送过来的原文本:xxxxxx[a:b]xxxxxx客户端显示出来的文本:xxxxxxaxxx...

  • Linux下Socket编程(五)——http容器(支持php)

    简介 理解http报文格式 socket+epoll+多线程框架 请求和响应类封装 正则表达式解析头部 请求文件读...

  • 总结js常用函数和常用技巧

    学习过程中总结的干货,包括常用函数、常用js技巧、常用正则表达式等。 Ajax封装 使用方法: 后台响应Ajax ...

  • RegExp对象,RegExpAPI,MathAPI(取整,乘方

    2016-08-31-day09 am 1. RegExp: 是什么:封装一条正则表达式,并提供用正则执行验证和查...

网友评论

      本文标题:正则表达式封装

      本文链接:https://www.haomeiwen.com/subject/ylpodttx.html