Ios Swift中的正则表达式,在运行时遇到了很多麻烦
我对swift非常陌生,我尝试使用正则表达式匹配信用卡号码。从我收集的资料来看,在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
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个数字。你期待什么?很抱歉打错了。现在正在工作。我感谢你的帮助。