美文网首页
IOS正则递归校验

IOS正则递归校验

作者: 口子窖 | 来源:发表于2018-07-25 19:52 被阅读39次

问题描述:
校验如下字符串格式是否符合要求(括号成对出现,且数量无限制)
(((a+b)*(c+d))+c)*(((a+b)*(c+d))+(d+e+c)+(w*i))
遇到这个问题,我第一想到的就是正则是不是有支持递归校验的功能,然后百度了好久,发现不是所有语言都支持递归校验的。最终没能找到合适的方案,只能曲线救国了。

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSString *str1 = @"(((a+b)*(c+d))+c)*(((a+b)*(c+d))+(d+e+c)+(w*i))";
    //NSString *str2 = @"(((a+b)*(c+d))+c)*(((a+b)*(c+d))+(d+e+c)+(w*i)))";
    BOOL b = [self isValidString:str1];
    NSLog(@"%d",b);
}

校验方法

- (BOOL)isValidString:(NSString *)str {
    NSString *pattern = @"\\([^\\(^\\)]*?\\)";
    NSString *pattern2 = @"\\(|\\)";
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:NULL];
    NSArray * rlts ;
    while ((rlts = [regex matchesInString:str options:NSMatchingReportCompletion range:NSMakeRange(0, str.length)]).count) {
        //找出最小单位的成对括号,并用下划线替换
        str = [regex stringByReplacingMatchesInString:str options:NSMatchingReportCompletion range:NSMakeRange(0, str.length) withTemplate:@"_"];
    }
    / /最后检查一次,如果还存在左括号或者右括号,说明出现了不成对的情况
    regex = [NSRegularExpression regularExpressionWithPattern:pattern2 options:NSRegularExpressionCaseInsensitive error:NULL];
    rlts = [regex matchesInString:str options:NSMatchingReportCompletion range:NSMakeRange(0, str.length)];
    return rlts.count == 0;
}

当输入str1时,结果为1,输入str2,结果为0

相关文章

  • IOS正则递归校验

    问题描述:校验如下字符串格式是否符合要求(括号成对出现,且数量无限制)(((a+b)*(c+d))+c)*(((a...

  • 正则表达式

    //正则校验html标签let reg = /<[^<>]+>/g //正则校验%let regP = /[%]/...

  • Vue 自定义校验

    自定义校验,添加正则校验 以下是常用的正则(补充中)

  • Ant Form使用总结 —— 校验

    正则校验 使用item属性rules[]字段中pattern进行正则校验,可进行多正则验证不同message 问题...

  • Golang 正则表达式

    参考golang之正则校验golang正则使用总结

  • java正则校验正确性

    java校验正则表达式是否正确。 try { String regex = "需要校验的正则表达式"; P...

  • 正则

    正则 1.什么是正则:用来操作字符串的规则; 正则就是用来操作(校验,捕获)“字符串”的 1)校验:返回布尔值 t...

  • iOS 输入法问题

    一 iOS系统九宫格中文输入法 UITextField 限制输入中文、英文、数字的需求,输入校验用正则"^[a-...

  • 基础工具方法记录

    身份证号正则校验 手机号校验 座机号校验 json序列化处理

  • 分享几个项目中常用的正则校验方式

    html 正则数字转化为大写 校验小数点后留取几位小数 限制textarea最多输入长度显示 正则校验如果输入回车...

网友评论

      本文标题:IOS正则递归校验

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