构建 Swift/ObjC 正则表达式
Building Swift / ObjC regular expression
在文本字符串中,我试图获取介于
之间的所有内容
[DATA FORMAT]
和 /DATA FORMAT]
和
Columns Format:
和 /DATA FORMAT]
为此我使用了正则表达式。
虽然模式
"\[DATA FORMAT\](.*?)\[/DATA FORMAT\]"
按预期工作,模式
"Columns Format(*.?)\[/DATA FORMAT\]"
报错
Optional("The value “Columns Format(*.?)\[/DATA FORMAT\]” is invalid.")
The value “Columns Format(*.?)\[/DATA FORMAT\]” is invalid.
打印在控制台(第一行:localizedFailureReason,第二行line:localizedDescription)
我错过了什么?
代码:
extension String
{
func match (pattern: String,
options: RegularExpression.Options = [.caseInsensitive, .dotMatchesLineSeparators]) -> [String]
{
do
{
let regex = try RegularExpression(pattern: pattern, options: options)
let regexAnsw = regex.matches(in: self, options: RegularExpression.MatchingOptions.withTransparentBounds, range: NSMakeRange(0, self.characters.count))
var retStrings = [String]()
for rs in regexAnsw
{
if let range = self.range(from: rs.range)
{
retStrings.append(self.substring(with: range))
}
else
{
print("match: cant' convert NSRange to range")
}
}
return retStrings
}
catch let error as NSError
{
print(error.localizedFailureReason)
print(error.localizedDescription)
return [String]()
}
}
}
您在第二个正则表达式中交换了 *
和 .
(在 "Column Format" 之后的捕获组中)。这使得正则表达式无效; *
没有指代任何东西。
在文本字符串中,我试图获取介于
之间的所有内容[DATA FORMAT]
和 /DATA FORMAT]
和
Columns Format:
和 /DATA FORMAT]
为此我使用了正则表达式。
虽然模式
"\[DATA FORMAT\](.*?)\[/DATA FORMAT\]"
按预期工作,模式
"Columns Format(*.?)\[/DATA FORMAT\]"
报错
Optional("The value “Columns Format(*.?)\[/DATA FORMAT\]” is invalid.")
The value “Columns Format(*.?)\[/DATA FORMAT\]” is invalid.
打印在控制台(第一行:localizedFailureReason,第二行line:localizedDescription)
我错过了什么?
代码:
extension String
{
func match (pattern: String,
options: RegularExpression.Options = [.caseInsensitive, .dotMatchesLineSeparators]) -> [String]
{
do
{
let regex = try RegularExpression(pattern: pattern, options: options)
let regexAnsw = regex.matches(in: self, options: RegularExpression.MatchingOptions.withTransparentBounds, range: NSMakeRange(0, self.characters.count))
var retStrings = [String]()
for rs in regexAnsw
{
if let range = self.range(from: rs.range)
{
retStrings.append(self.substring(with: range))
}
else
{
print("match: cant' convert NSRange to range")
}
}
return retStrings
}
catch let error as NSError
{
print(error.localizedFailureReason)
print(error.localizedDescription)
return [String]()
}
}
}
您在第二个正则表达式中交换了 *
和 .
(在 "Column Format" 之后的捕获组中)。这使得正则表达式无效; *
没有指代任何东西。