zoukankan      html  css  js  c++  java
  • 简单的正则表达式拼接类

        TigerRegular *reg = [TigerRegular new];
        [reg addOptionalTextItems:@[@"http", @"ftp", @"wc"] minTimes:1 maxTimes:1];
        [reg addStaticText:@"s" minTimes:0 maxTimes:1];
        [reg addStaticText:@"://" minTimes:1 maxTimes:1];
        [reg addCharacterInText:@"0-9A-Za-z" minLength:1 maxLength:INT_MAX];
        TigerRegular *domainReg = [TigerRegular new];
        [domainReg addStaticText:@"." minTimes:1 maxTimes:1];
        [domainReg addCharacterInText:@"0-9A-Za-z" minLength:1 maxLength:INT_MAX];
        [reg addSubRegular:domainReg.regular minTimes:0 maxTimes:3];
        TigerRegular *portReg = [TigerRegular new];
        [portReg addStaticText:@":" minTimes:1 maxTimes:1];
        [portReg addCharacterInText:@"0-9" minLength:1 maxLength:4];
        [reg addSubRegular:portReg.regular minTimes:0 maxTimes:INT_MAX];
        TigerRegular *pathReg = [TigerRegular new];
        [pathReg addStaticText:@"/" minTimes:1 maxTimes:1];
        [pathReg addCharacterInText:@"0-9A-Za-z" minLength:1 maxLength:INT_MAX];
        [reg addSubRegular:pathReg.regular minTimes:0 maxTimes:INT_MAX];
        [reg addSubRegular:domainReg.regular minTimes:0 maxTimes:1];
        NSLog(@"%@", reg.regular);
    @interface TigerRegular : NSObject
    
    @property (nonatomic, copy, readonly) NSString *regular;
    
    - (void)addStaticText:(NSString*)text minTimes:(int)minTimes maxTimes:(int)maxTimes;
    - (void)addCharacterInText:(NSString*)text minLength:(int)minLength maxLength:(int)maxLength;
    - (void)addCharacterNotInText:(NSString*)text minLength:(int)minLength maxLength:(int)maxLength;
    - (void)addOptionalTextItems:(NSArray<NSString*>*)textItems minTimes:(int)minTimes maxTimes:(int)maxTimes;
    - (void)addSubRegular:(NSString*)regular minTimes:(int)minTimes maxTimes:(int)maxTimes;
    
    @end
    #import "TigerRegular.h"
    
    typedef NSString * TigerRegularRange;
    typedef NSString * TigerRegularOptional;
    typedef NSString * TigerRegularPart;
    typedef NSString * TigerRegularItem;
    typedef NSString * TigerRegularRepeat;
    typedef NSString * TigerRegularConfiguration;
    
    @interface TigerRegular ()
    
    @property (nonatomic, strong) NSMutableString *tigerRegular;
    
    @end
    
    @implementation TigerRegular
    
    - (instancetype)init {
        self = [super init];
        if (self) {
            self.tigerRegular = [NSMutableString string];
        }
        return self;
    }
    
    - (void)addStaticText:(NSString*)text minTimes:(int)minTimes maxTimes:(int)maxTimes {
        TigerRegularPart part = [self partWithItem:[self encodeItem:text]];
        TigerRegularConfiguration configuration = [self configurationWithPart:part repeat:[self repeat:minTimes maxTimes:maxTimes]];
        [self.tigerRegular appendString:configuration];
        
    }
    - (void)addCharacterInText:(NSString*)text minLength:(int)minLength maxLength:(int)maxLength {
        TigerRegularRange range = [self range:[self encodeItem:text]];
        TigerRegularPart part = [self belong:range];
        TigerRegularConfiguration configuration = [self configurationWithPart:part repeat:[self repeat:minLength maxTimes:maxLength]];
        [self.tigerRegular appendString:configuration];
    }
    - (void)addCharacterNotInText:(NSString*)text minLength:(int)minLength maxLength:(int)maxLength {
        TigerRegularRange range = [self range:[self encodeItem:text]];
        TigerRegularPart part = [self notBelong:range];
        TigerRegularConfiguration configuration = [self configurationWithPart:part repeat:[self repeat:minLength maxTimes:maxLength]];
        [self.tigerRegular appendString:configuration];
    }
    - (void)addOptionalTextItems:(NSArray<NSString*>*)textItems minTimes:(int)minTimes maxTimes:(int)maxTimes {
        NSMutableArray <TigerRegularItem> *inputItems = [NSMutableArray array];
        for (TigerRegularItem item in textItems) {
            [inputItems addObject:[self encodeItem:item]];
        }
        TigerRegularOptional optional = [self optional:inputItems.copy];
        TigerRegularConfiguration configuration = [self configurationWithOptional:optional repeat:[self repeat:minTimes maxTimes:maxTimes]];
        [self.tigerRegular appendString:configuration];
        
    }
    - (void)addSubRegular:(NSString*)regular minTimes:(int)minTimes maxTimes:(int)maxTimes {
        TigerRegularConfiguration configuration = [self configurationWithSubConfiguration:regular repeat:[self repeat:minTimes maxTimes:maxTimes]];
        [self.tigerRegular appendString:configuration];
    }
    
    - (TigerRegularRepeat)repeat:(int)minTimes maxTimes:(int)maxTimes {
        if (minTimes == 0 && maxTimes == 1) {
            return self.lessOrEqualOnce;
        }
        if (minTimes == 0 && maxTimes == INT_MAX) {
            return self.anyTimes;
        }
        if (minTimes == 1 && maxTimes == INT_MAX) {
            return self.moreThenOnce;
        }
        if (minTimes == maxTimes) {
            return [self matchTimes:minTimes];
        }
        if (maxTimes == INT_MAX) {
            return [self matchMoreThenTimes:minTimes];
        }
        return [self matchTimes:minTimes max:maxTimes];
    }
    
    - (NSString *)regular {
        return self.tigerRegular.copy;
    }
    
    - (TigerRegularConfiguration)configurationWithOptional:(TigerRegularOptional)optional repeat:(TigerRegularRepeat)repeat {
        return [NSString stringWithFormat:@"(%@)%@", optional, repeat];
    }
    
    - (TigerRegularConfiguration)configurationWithPart:(TigerRegularPart)part repeat:(TigerRegularRepeat)repeat {
        return [NSString stringWithFormat:@"(%@)%@", part, repeat];
    }
    
    - (TigerRegularConfiguration)configurationWithSubConfiguration:(TigerRegularConfiguration)subConfiguration repeat:(TigerRegularRepeat)repeat {
        return [NSString stringWithFormat:@"(%@)%@", subConfiguration, repeat];
    }
    
    - (TigerRegularPart)partWithItem:(TigerRegularItem)item {
        return item;
    }
    
    - (TigerRegularRange)range:(TigerRegularRange)range appendRange:(TigerRegularRange)otherRange {
        return [NSString stringWithFormat:@"%@%@", range, otherRange];
    }
    
    // 属于某一个字符
    - (TigerRegularPart)belong:(TigerRegularRange)range {
        return [NSString stringWithFormat:@"[%@]", range];
    }
    
    // 不属于某一个字符
    - (TigerRegularPart)notBelong:(TigerRegularRange)range {
        return [NSString stringWithFormat:@"[^%@]", range];
    }
    
    // 可选值
    - (TigerRegularOptional)optional:(NSArray<TigerRegularItem>*)optional {
        return [optional componentsJoinedByString:@"|"];
    }
    
    // 可选字符
    - (TigerRegularRange)range:(TigerRegularRange)range {
        return range;
    }
    
    // 字符区间
    - (TigerRegularRange)range:(TigerRegularItem)start end:(TigerRegularItem)end {
        return [NSString stringWithFormat:@"%@-%@", start, end];
    }
    
    // 数字
    - (TigerRegularItem)number {
        return @"\d";
    }
    
    // 字符
    - (TigerRegularItem)character {
        return @"\w";
    }
    
    // 空格
    - (TigerRegularItem)blankSpace {
        return @"\s";
    }
    
    
    // 数字
    - (TigerRegularItem)notNumber {
        return @"\D";
    }
    
    // 字符
    - (TigerRegularItem)notCharacter {
        return @"\W";
    }
    
    // 空格
    - (TigerRegularItem)notBlankSpace {
        return @"\S";
    }
    
    // 不是换行
    - (TigerRegularItem)notNewLine {
        return @".";;
    }
    
    // 最多出现一次
    - (TigerRegularRepeat)lessOrEqualOnce {
        return @"?";
    }
    
    // 任意次
    - (TigerRegularRepeat)anyTimes {
        return @"*";
    }
    
    // 超过1次
    - (TigerRegularRepeat)moreThenOnce {
        return @"+";
    }
    
    // 字符串开头
    - (TigerRegularConfiguration)isPrefix {
        return @"^";
    }
    
    // 字符串结尾
    - (TigerRegularConfiguration)isSuffix {
        return @"$";
    }
    
    - (NSArray<TigerRegularItem>*)keywordItems {
        static NSArray<TigerRegularItem> *items = nil;
        if (!items) {
            items = @[self.notNewLine, self.lessOrEqualOnce, self.anyTimes, self.moreThenOnce, self.isPrefix, self.isSuffix];
        }
        return items;
    }
    
    - (TigerRegularItem)encodeItem:(TigerRegularItem)item {
        TigerRegularItem newItem = item;
        for (TigerRegularItem object in self.keywordItems) {
            newItem = [newItem stringByReplacingOccurrencesOfString:object withString:[NSString stringWithFormat:@"\%@", object]];
        }
        return newItem;
    }
    
    // 出现N次
    - (TigerRegularRepeat)matchTimes:(int)times {
        return [NSString stringWithFormat:@"{%d}", times];
    }
    
    // 出现N次以上
    - (TigerRegularRepeat)matchMoreThenTimes:(int)times {
        return [NSString stringWithFormat:@"{%d,}", times];
    }
    
    // 出现M-N次之间
    - (TigerRegularRepeat)matchTimes:(int)min max:(int)max {
        return [NSString stringWithFormat:@"{%d,%d}", min, max];
    }
    
    @end
  • 相关阅读:
    今天封装了一下 gridview 在没有数据的时候显示表头 并且提示数据为空的方法
    动态绑定treeview的方法
    Android为拨号盘dialer定制声音DTMF Tones
    如何降低android应用程序的耗电量
    DTMF双音多频按键信号的定义
    ant 实现批量打包android应用
    android网络编程——使用Android中的网络连接
    Android Service被关闭后自动重启,解决被异常kill 服务
    android中阿拉伯文研究
    android网络编程——http get
  • 原文地址:https://www.cnblogs.com/yuxiaoyiyou/p/14695055.html
Copyright © 2011-2022 走看看