IOS程序中的正则表达式问题

Posted

技术标签:

【中文标题】IOS程序中的正则表达式问题【英文标题】:Regex issue in IOS Program 【发布时间】:2012-06-04 13:21:19 【问题描述】:

我正在尝试让以下正则表达式在 ios 上运行,以确保用户只输入数字和点。我无法使匹配数超过 0。我也尝试过 NSRange 一个,无论如何这都会给我 0,所以我的正则表达式不起作用,即使我很确定它应该与我有什么。任何建议。

我写的代码在这里,errorRegex 定义在 .h 文件中,regError 也定义了。

errorRegex = [NSRegularExpression regularExpressionWithPattern:@"[^0-9.]*" 
            options: NSRegularExpressionCaseInsensitive error:&regError];

NSUInteger rangeOfFirstMatch = [errorRegex numberOfMatchesInString:servAmount1TF.text 
            options:0 range:NSMakeRange(0, [servAmount1TF.text length])];

【问题讨论】:

我对你的正则表达式 @"\\b[^0-9^.]*\\b" 感到困惑,尤其是第二个插入符号。你想让字符类匹配任何既不是数字也不是小数点的东西?如果是这样,那么我想你想要@"\\b[^0-9.]*\\b" 是的,它是一个多余的 ^,它仍然在 rubular 的网站上工作,所以我认为这不会导致实际错误 【参考方案1】:

为什么不使用标准 c 的 regex.h 呢?

在此处查看示例: http://cboard.cprogramming.com/c-programming/117525-regex-h-extracting-matches.html

这里有更多信息: https://***.com/a/422159/1208218

【讨论】:

这是一条有趣的路线。我选择NS方式是因为iphone。但是,我觉得这最终会是一条更好的路线,因为我的意思是 c 与 Objective-c 一起工作,所以谢谢。 很高兴听到它很有帮助。我认为使用股票标准的 c 功能可以通过这种方式完成更多的事情。【参考方案2】:

errorRegex 的类型为 NSRegularExpression,但错误的类型为 UIButtonContent。这具有内存错误的所有特征。您的代码中的某些内容没有通过适当的保留/发布周期。


我得到了一个单元测试来使用表达式 @"[^0-9.]+"

- (void)testRE

    NSError *regError = nil;
    NSRegularExpression *errorRegex;
    NSString *string;
    NSUInteger count;

    errorRegex = [NSRegularExpression regularExpressionWithPattern:@"[^0-9.]+" 
                                                           options: NSRegularExpressionCaseInsensitive
                                                             error:&regError];
    STAssertNil(regError, nil);

    string = @"00.0";
    count = [errorRegex numberOfMatchesInString:string 
                                        options:0
                                          range:NSMakeRange(0, [string length])];
    STAssertEquals(count, 0U, nil);

    string = @"00A00";
    count = [errorRegex numberOfMatchesInString:string 
                                        options:0
                                          range:NSMakeRange(0, [string length])];
    STAssertEquals(count, 1U, nil);

【讨论】:

我修复了您评论的部分,但忘记更新帖子。我将所有正则表达式工作放在同一个方法中,而不是让正则表达式在 .c 文件中全局工作 我明天试试这个然后回复你。谢谢 谢谢。由于解释和正则表达式所代表的内容,我添加了我的答案,因此如果其他人需要它,他们将拥有公式。【参考方案3】:
NSRegularExpression *errorCheckRegEx = [[NSRegularExpression alloc] initWithPattern:@"\\b^([0-9]+(\\.)?[0-9]*)$|^([0-9]*(\\.)?[0-9]+)$|^[0-9]*$|^([0-9]*(\\/)?[0-9]*)$\\b" options:NSRegularExpressionCaseInsensitive error:nil];
[match setArray: [errorCheckRegEx matchesInString:servAmount1TF.text options:0 range:NSMakeRange(0, [servAmount1TF.text length])]];

当我终于可以重新开始时,我想出了我需要做的事情,所以如果有人感兴趣,这就是我想出的。 \b 正是 ios 在他们的正则表达式中使用的东西,这有点愚蠢,但没有它它就无法工作,所以当它感觉不自然时,我把它留在那里,特别是在 ruby​​ 的例子之后。这个正则表达式将得到分数、小数 -> .3; 2.3; 2;并从头到尾进行。我认为可能发生的事情是我没有使用 \b 并且也没有正确匹配,这是第二行。无论哪种方式,它现在都很好用。感谢您的帮助。

【讨论】:

以上是关于IOS程序中的正则表达式问题的主要内容,如果未能解决你的问题,请参考以下文章

PHP:正则表达式,如何验证 android 和 ios 深层链接 URI

正则表达式语法与正则表达式在iOS中的常见用法

Swift 将 javascript 正则表达式转换为 ios 正则表达式

IOS使用正则表达式去掉html中的标签元素,获得纯文本

ios正则表达式

ios:使用 NSPredicate 检查正则表达式 - 无法解析格式字符串