在Swift 3中使用带有管道分隔符的正则表达式来过滤匹配

时间:2017-01-18 04:56:28

标签: ios regex swift string

到目前为止看了很多正则表达式stackoverflow问题,我有点困惑为什么我的正则表达式没有过滤掉我想删除的子字符串。我知道很快,我需要逃避任何其他逃脱。

首先,我对String有一个扩展名,如下所示:

dispatch_async(dispatch_get_main_queue(), ^{
    [BrightnessSlider sendActionsForControlEvents: UIControlEventTouchUpInside];
[BrightnessSlider sendActionsForControlEvents: UIControlEventTouchUpInside];
});

让我们说例如文字是:

extension String { func stringByRemovingRegexMatches(pattern: String, replaceWith: String = "") -> String? { do { let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpression.Options.caseInsensitive) print(regex) let range = NSMakeRange(0, self.characters.count) return regex.stringByReplacingMatches(in: self, options: [], range: range, withTemplate: replaceWith) } catch { return nil } } }

我想让它在我的Swift项目中返回+++cta\n[![](http://media.test.com/1.jpg)](http://www.test.com/slideshow)\n\n+++\n\n<span class=\"s1\">Hello</span><span class=\"s2\"> World\n\n[cm_image id=\"13501068\"]<img style=\"width: 100%;\" src=\"http://www.test.com/1.jpg\" alt=\"\" />[/cm_image]\n\n[#c: /c/56be30deff2afb50ef000026]||||||,但它似乎只过滤了Hello World\n

<span>

我在Swift中的正则表达式字符串是:

+++cta\n[![](http://media.test.com/1.jpg)](http://www.test.com/slideshow)\n\n+++\n\nHello World\n\n[cm_image id=\"13501068\"]<img style=\"width: 100%;\" src=\"http://www.test.com/1.jpg\" alt=\"\" />[/cm_image]\n\n[#c: /c/56be30deff2afb50ef000026]||||||

上面我注意到我有"\\+(^)\\+|\\\\n\\[(.*)\\|\\|\\|\\|\\|\\||\\\\n\\[c(.*)\\\\n\\\\n|\\+(.*)\\+\\\\n\\\\n|<[^>]+>" 的打印声明,它与我放入regexr的内容相符,字符串为:

regex

他们都完全相同。

为了进一步说明,我有一个指向regexr here的链接。

我在Swift中做错了吗?难道swift无法识别<NSRegularExpression: 0x7ff8d576df00> \+(^)\+|\\n\[(.*)\|\|\|\|\|\||\\n\[c(.*)\\n\\n|\+(.*)\+\\n\\n|<[^>]+> 0x1 \+(^)\+|\\n\[(.*)\|\|\|\|\|\||\\n\[c(.*)\\n\\n|\+(.*)\+\\n\\n|<[^>]+> 吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

因此,确保我的startIndex和endIndex之间有((.|\n)*)解决了这个问题,因为我想要所有字符或在我的界限之间返回。