如何在Swift中检查正则表达式是否有效?

提示

我正在使用正则表达式在textView中搜索。都可以使用简单的字符串正常工作,但是当我尝试仅输入正则表达式运算符的一部分时,我得到了一笔错误的提示:

Error Domain=NSCocoaErrorDomain Code=2048 "The value “\” is invalid." UserInfo={NSInvalidValue=\}

例如,如果我输入“ \ n”,它可以工作,但是如果我仅输入“ \”(不带引号),则会崩溃。我无法做的是找到一种使用该表达式之前对其进行检查的方法。

我正在部分根据本教程WiktorStribiżew的答案使用此代码

extension NSRegularExpression {
    convenience init?(options: SearchOptions) {
        let searchString = options.searchString
        let isCaseSensitive = options.matchCase // set to true
        let isWholeWords = options.wholeWords // set to false
        let escapeMetacharacters = options.escapeMetacharacters // set to false

        // handle case sensitive option
        var regexOption: NSRegularExpressionOptions = .CaseInsensitive
        if isCaseSensitive { // if it is match case remove case sensitive option
            regexOption = []
        }

        // put the search string in the pattern
        var pattern = searchString

        if isWholeWords {
            pattern = "(?<!\\w)" + NSRegularExpression.escapedPatternForString(searchString) + "(?!\\w)"
        }

        do {
            try self.init(pattern: pattern, options: regexOption)
        } catch {
            print(error)
        }
    }
}
OOPer

下面的第一个代码显示了不稳定的行为,您不应使用它。(请参阅此答案的后半部分。)

向失败的初始化程序添加一行:

        do {
            try self.init(pattern: pattern, options: regexOption)
        } catch {
            print(error)
            return nil //->you need to return nil to tell initialization failed
        }

(我认为Swift编译器应该警告这种丢失return nil。可能是Swift的错误吗?)

之后,您可以安全地检查结果是否为零:

let sOpts = SearchOptions(searchString: "\\", replacementString: "", matchCase: false, wholeWords: false)
if let regex = NSRegularExpression(options: sOpts) {
    //Use regex
    print(regex)
} else {
    //Process errors
    print("Something bad in SearchOptions")
}

(我省略了escapeMetacharacters,因为尚未使用。)


据我测试,使用静态方法从未崩溃过。

extension NSRegularExpression {
    static func expresssionWith(options: SearchOptions) -> NSRegularExpression? {
        let searchString = options.searchString
        let isCaseSensitive = options.matchCase // set to true
        let isWholeWords = options.wholeWords // set to false

        // handle case sensitive option
        var regexOption: NSRegularExpressionOptions = .CaseInsensitive
        if isCaseSensitive { // if it is match case remove case sensitive option
            regexOption = []
        }

        // put the search string in the pattern
        var pattern = searchString

        if isWholeWords {
            pattern = "(?<!\\w)" + NSRegularExpression.escapedPatternForString(searchString) + "(?!\\w)"
        }

        do {
            return try NSRegularExpression(pattern: pattern, options: regexOption)
        } catch  {
            print(error)
            return nil
        }
    }
}

let sOpts = SearchOptions(searchString: "\\", replacementString: "", matchCase: false, wholeWords: false)

if let regex = NSRegularExpression.expresssionWith(sOpts) {
    //Use regex
    print(regex)
} else {
    //Process errors
    print("Something bad in SearchOptions")
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

\ 0(C风格的正则表达式字符串中的“ \\ 0”)在C ++正则表达式中是否有效?

来自分类Dev

如何检查字符串在Python中是否为有效的正则表达式?

来自分类Dev

有效的域名正则表达式

来自分类Dev

使用正则表达式检查字符串以获取有效的CSS

来自分类Dev

如何用正则表达式检查有效的小数点位数?

来自分类Dev

Java正则表达式,用于检查变量名的有效性

来自分类Dev

更有效的正则表达式

来自分类Dev

有效字符串时区检查的正则表达式

来自分类Dev

正则表达式检查用户名是否有效

来自分类Dev

使用正则表达式检查字符串结尾在Java中是否有效

来自分类Dev

用于在C#中检查有效属性名称的正则表达式

来自分类Dev

在python中使用正则表达式检查表达式是否有效

来自分类Dev

Python正则表达式测试句子是否有效

来自分类Dev

检查输入python正则表达式的有效性

来自分类Dev

C ++正则表达式失败,而在线检查器有效

来自分类Dev

使用正则表达式检查字符串以获取有效的CSS

来自分类Dev

如何用正则表达式检查有效的小数点位数?

来自分类Dev

始终检查希伯来语正则表达式是否有效

来自分类Dev

正则表达式检查用户名是否有效

来自分类Dev

正则表达式以检查有效的网址http或www

来自分类Dev

在Ruby中,如何组织大量数据以进行最有效的正则表达式搜索?

来自分类Dev

如何在Swift中检查正则表达式是否有效?

来自分类Dev

在bash中使用正则表达式检查有效的(子)域

来自分类Dev

有效的正则表达式?

来自分类Dev

正则表达式有效的电子邮件检查

来自分类Dev

perl 使用正则表达式检查有效的 DNA 序列

来自分类Dev

正则表达式验证字符串是否是有效的 SQL 列名

来自分类Dev

检查表达式是否有效

来自分类Dev

如何构造正则表达式来检查有效路径?

Related 相关文章

  1. 1

    \ 0(C风格的正则表达式字符串中的“ \\ 0”)在C ++正则表达式中是否有效?

  2. 2

    如何检查字符串在Python中是否为有效的正则表达式?

  3. 3

    有效的域名正则表达式

  4. 4

    使用正则表达式检查字符串以获取有效的CSS

  5. 5

    如何用正则表达式检查有效的小数点位数?

  6. 6

    Java正则表达式,用于检查变量名的有效性

  7. 7

    更有效的正则表达式

  8. 8

    有效字符串时区检查的正则表达式

  9. 9

    正则表达式检查用户名是否有效

  10. 10

    使用正则表达式检查字符串结尾在Java中是否有效

  11. 11

    用于在C#中检查有效属性名称的正则表达式

  12. 12

    在python中使用正则表达式检查表达式是否有效

  13. 13

    Python正则表达式测试句子是否有效

  14. 14

    检查输入python正则表达式的有效性

  15. 15

    C ++正则表达式失败,而在线检查器有效

  16. 16

    使用正则表达式检查字符串以获取有效的CSS

  17. 17

    如何用正则表达式检查有效的小数点位数?

  18. 18

    始终检查希伯来语正则表达式是否有效

  19. 19

    正则表达式检查用户名是否有效

  20. 20

    正则表达式以检查有效的网址http或www

  21. 21

    在Ruby中,如何组织大量数据以进行最有效的正则表达式搜索?

  22. 22

    如何在Swift中检查正则表达式是否有效?

  23. 23

    在bash中使用正则表达式检查有效的(子)域

  24. 24

    有效的正则表达式?

  25. 25

    正则表达式有效的电子邮件检查

  26. 26

    perl 使用正则表达式检查有效的 DNA 序列

  27. 27

    正则表达式验证字符串是否是有效的 SQL 列名

  28. 28

    检查表达式是否有效

  29. 29

    如何构造正则表达式来检查有效路径?

热门标签

归档