Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift中的正则表达式,在运行时遇到了很多麻烦_Ios_Regex_Swift - Fatal编程技术网

Ios Swift中的正则表达式,在运行时遇到了很多麻烦

Ios Swift中的正则表达式,在运行时遇到了很多麻烦,ios,regex,swift,Ios,Regex,Swift,我对swift非常陌生,我尝试使用正则表达式匹配信用卡号码。从我收集的资料来看,在swift中,正则表达式一点也不直接,我在编译这段代码时遇到了很多麻烦,更不用说返回任何有用的东西了 var info : String = "" let regex = try! NSRegularExpression(pattern: "/d{4}/s/d{6}/s/d{5}", options: NSRegularExpressionOptions.CaseInsensitive) for

我对swift非常陌生,我尝试使用正则表达式匹配信用卡号码。从我收集的资料来看,在swift中,正则表达式一点也不直接,我在编译这段代码时遇到了很多麻烦,更不用说返回任何有用的东西了

var info : String = ""

    let regex = try! NSRegularExpression(pattern: "/d{4}/s/d{6}/s/d{5}", options: NSRegularExpressionOptions.CaseInsensitive)

    for (var i : UInt = 0; i < cardsInTable.count; i++) {
        let line : NSString = cardsInTable.elementBoundByIndex(i).label

        let matches = regex.numberOfMatchesInString("-v", options:NSMatchingOptions.WithTransparentBounds, range: NSRangeFromString(line as String))
        if (matches > 0) {
            info += (line as String) + "\n"
        }
    }

你的划错方向了。你需要反斜杠而不是正斜杠

"\\d{4}\\s\\d{6}\\s\\d{5}"

修复了三个问题…错误的正则表达式,传递给正则表达式的错误字符串,以及错误的范围,以下是我所拥有的

var info : String = ""

let regex = try! NSRegularExpression(pattern: "\\d{4}\\s\\d{6}\\s\\d{5}", options: NSRegularExpressionOptions.CaseInsensitive)

for (var i : Int = 0; i < cardsInTable.count; i++) {
    let line : NSString = cardsInTable[i].label
    let range = NSRange(location: 0, length: line.length)

    let matches = regex.numberOfMatchesInString(line as String, options:[.WithTransparentBounds], range: range)
    if (matches > 0) {
        info += (line as String) + "\n"
    }
}
var-info:String=“”
让regex=试试!NSRegularExpression(模式:“\\d{4}\\s\\d{6}\\s\\d{5}”,选项:NSRegularExpressionOptions.case不区分大小写)
对于(变量i:Int=0;i0){
信息+=(行作为字符串)+“\n”
}
}

您的斜杠方向错误。你需要反斜杠而不是正斜杠

"\\d{4}\\s\\d{6}\\s\\d{5}"

修复了三个问题…错误的正则表达式,传递给正则表达式的错误字符串,以及错误的范围,以下是我所拥有的

var info : String = ""

let regex = try! NSRegularExpression(pattern: "\\d{4}\\s\\d{6}\\s\\d{5}", options: NSRegularExpressionOptions.CaseInsensitive)

for (var i : Int = 0; i < cardsInTable.count; i++) {
    let line : NSString = cardsInTable[i].label
    let range = NSRange(location: 0, length: line.length)

    let matches = regex.numberOfMatchesInString(line as String, options:[.WithTransparentBounds], range: range)
    if (matches > 0) {
        info += (line as String) + "\n"
    }
}
var-info:String=“”
让regex=试试!NSRegularExpression(模式:“\\d{4}\\s\\d{6}\\s\\d{5}”,选项:NSRegularExpressionOptions.case不区分大小写)
对于(变量i:Int=0;i0){
信息+=(行作为字符串)+“\n”
}
}

除了错误的图案,这一行

let matches = regex.numberOfMatchesInString("-v", 
       options:NSMatchingOptions.WithTransparentBounds,
       range: NSRangeFromString(line as String))
这是完全错误的。第一个参数应该是给定的行, 不是固定字符串
“-v”
。而
NSRangeFromString()
不做什么 你可能认为是的。它从文本表示创建一个范围。例如

创建范围
(1234123456)
。这就是为什么 “范围或索引超出范围” 例外

正确的答案是

let matches = regex.numberOfMatchesInString(line as String,
    options: [],
    range: NSMakeRange(0, line.length))

(设置了一个空选项,因为我认为这里实际上不需要
.WithTransparentBounds
选项)。

除了错误的模式之外,这一行

let matches = regex.numberOfMatchesInString("-v", 
       options:NSMatchingOptions.WithTransparentBounds,
       range: NSRangeFromString(line as String))
这是完全错误的。第一个参数应该是给定的行, 不是固定字符串
“-v”
。而
NSRangeFromString()
不做什么 你可能认为是的。它从文本表示创建一个范围。例如

创建范围
(1234123456)
。这就是为什么 “范围或索引超出范围” 例外

正确的答案是

let matches = regex.numberOfMatchesInString(line as String,
    options: [],
    range: NSMakeRange(0, line.length))


(设置了一个空选项,因为我认为这里实际上不需要
.WithTransparentBounds
选项)。

将固定字符串
“-v”
作为第一个参数传递给函数,但将
行的长度作为长度传递给函数……传递的是固定字符串
“-v”
作为函数的第一个参数,但
行的长度作为长度…天哪。在swift中,反斜杠需要这样转义:“\\d{4}\\s\\d{6}\\s\\d{5}”,但反斜杠需要转义<代码>“\\d{4}\\s\\d{6}\\s\\d{5}”
对于think-o感到抱歉。谢谢你的帮助。实际上没有“正斜杠”这种东西,它只是一个“斜杠”,unicode名称是:“SOLIDUS”。“正斜杠”之所以出现,是因为Windows用户正在调用“\”斜杠。感谢您的编辑。仍然难以达到预期的效果。是否有任何选项:我以前选择的与查找数字冲突?你会推荐其他人吗?天哪。在swift中,反斜杠需要这样转义:“\\d{4}\\s\\d{6}\\s\\d{5}”,但反斜杠需要转义<代码>“\\d{4}\\s\\d{6}\\s\\d{5}”
对于think-o感到抱歉。谢谢你的帮助。实际上没有“正斜杠”这种东西,它只是一个“斜杠”,unicode名称是:“SOLIDUS”。“正斜杠”之所以出现,是因为Windows用户正在调用“\”斜杠。感谢您的编辑。仍然难以达到预期的效果。是否有任何选项:我以前选择的与查找数字冲突?你会推荐其他人吗?阿福,你也赢了我。我刚刚注意到
NSRangeFromString
错误。是否有办法不指定任何选项?Nil不是的有效类型NSMatchingOptions@AlexSchade:是,正如
[]
@AlexSchade:是的,因为最后一组有4个数字,您的图案需要5个数字。你期待什么?很抱歉打错了。现在正在工作。谢谢你的帮助。阿福,你也打败了我。我刚刚注意到
NSRangeFromString
错误。是否有办法不指定任何选项?Nil不是的有效类型NSMatchingOptions@AlexSchade:是,正如
[]
@AlexSchade:是的,因为最后一组有4个数字,您的图案需要5个数字。你期待什么?很抱歉打错了。现在正在工作。我感谢你的帮助。