美文网首页Xcoder Tips
所见即得的正则表达式

所见即得的正则表达式

作者: rickytan | 来源:发表于2019-02-23 20:10 被阅读0次

一般开发中,时不时需要用到正则表达式。然而不像 JavaScript 等语言一样有方便的原生支持,在 Objective-C 等语言中需要用字符串来生成正则表达式对象,而做为字符串字面量,它免不了需要转义。

JavaScript 版本

var reg = /^1\d{10}$/;    // 判断中国大陆手机号

Objective-C 版本

NSNSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:@"^1\\d{10}$" 
                                                                       options:0
                                                                         error:NULL];

这里匹配数字就要两个 \ 了,成为 \\d。如果再复杂一点,写起来就要特别小心了。

为解决此问题,特做了一个宏要实现所见即所得的正则表达式:

#ifndef REGEXP
# define _regexp_stringify(x)       #x
# define _regexp_stringify2(x)      _regexp_stringify(x)
# define _regexp(...)               ({ const char *str = _regexp_stringify2(# __VA_ARGS__); const size_t length = strlen(str); [[NSString alloc] initWithBytes:str + 1 length:length - 2 encoding:NSUTF8StringEncoding]; })
# define REGEXP(...)                [NSRegularExpression regularExpressionWithPattern:_regexp(__VA_ARGS__) options:0 error:NULL]
#endif

上面的 Objective-C 版本可以改为:

NSNSRegularExpression *reg = REGEXP(^1\d{10}$);

JavaScript 的写法基本一致了,你可以在 http://regexr.com/ 等类似网站上先测试你的表达式,然后直接拿来用而无需转义。

注意:此宏生成的字符串不再是编译时的常量,而是运行时生成的,会有一定的性能损失

相关文章

  • 所见即得的正则表达式

    一般开发中,时不时需要用到正则表达式。然而不像 JavaScript 等语言一样有方便的原生支持,在 Object...

  • 当得

    所闻即所示,所见即所得 人过路风景,见闻渐示得

  • 正则表达式RegExp

    正则表达式在许多编程语言中都具有重要得作用,学会立正则表达式对编程处理数据具有事半功倍的作用 正则表达式得模式修饰...

  • 初次尝试

    何为所见即所得

  • markdown工具

    Typora 所见即所得

  • 华为云java Spring boot 自动化部署

    1、编译构建 选择要编译得源码 创建构建步骤 注意要加上profiles得版本 修改构建包得正则表达式 ···· ...

  • HTML表单-简单入门使用

    最简单的代码-所见即所得

  • 2021-01-06

    “此情即此景,所见即所得”。

  • 2018-07-30

    魔幻手机--之所见即所得 (一) ...

  • xib嵌套xib

    xib定制类嵌套在另一个xib中的方法 我不是一个经常使用xib的人,总感觉xib所见即得,非常简单,昨天同事在写...

网友评论

    本文标题:所见即得的正则表达式

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