Ios NSRegularExpression中的排除模式
想象下面的句子:Ios NSRegularExpression中的排除模式,ios,swift,nsregularexpression,Ios,Swift,Nsregularexpression,想象下面的句子: quick**brown**fox**… 如果我运行以下regex let boldPattern = "\\*{2}([\\w ]+)\\*{2}" let boldRegex = try NSRegularExpression(pattern: boldPattern) let str = "The **quick** brown **fox** ..." let results = regex.matches(in: str, range: NSRange(str.
quick**brown**fox**…
如果我运行以下regex
let boldPattern = "\\*{2}([\\w ]+)\\*{2}"
let boldRegex = try NSRegularExpression(pattern: boldPattern)
let str = "The **quick** brown **fox** ..."
let results = regex.matches(in: str, range: NSRange(str.startIndex..., in: str))
results.forEach {
print("$0")
}
我能够获得**
之间的所有单词
我读过关于负正则表达式的文章,它返回除我们试图“避免”的单词之外的所有单词
考虑到上面的句子,有没有办法使用否定的正则表达式
来获取与粗体模式
不匹配的单词,这样我就可以得到棕色…
,避免使用**单词**
编辑
我正在寻找关于这个模式的一些东西((?!\\*{2}([\\w]+)\*{2})。*,搜索不以
**word**
开头的单词的东西。一种方法是使用NSRegularExpression
的StringPlacingMatches
方法
例如:
let boldPattern = "\\*{2}([\\w ]+)\\*{2}"
let boldRegex = try NSRegularExpression(pattern: boldPattern)
let str = "The **quick** brown **fox** ..."
let unmatchedString = boldRegex.stringByReplacingMatches(in: str, options: [], range: NSMakeRange(0, str.count), withTemplate: "")
print(unmatchedString)
// prints: The brown ...
这肯定会帮助我解决问题,尽管我以后可能会遇到问题。我想我的问题有问题。假设我有一个带有
**标记**
的粗体文本,之后我删除了一个*
字符,因此它与粗体模式不匹配。我试图做的是应用默认的文本样式,去掉粗体属性,因此我需要迭代字符串并“避免”这些粗体模式,因此我不会对其应用默认属性。虽然,你的答案回答了我的问题,所以我认为它是正确的。实际上,*
是问题所在,如果它是任何其他字符,它会更容易<代码>*本身在正则表达式中有它的含义。@TheTiger是的,你是对的。我不知道怎么解决这个问题。正则表达式非常棘手。在这种情况下,您的正则表达式工作错误?@TheTiger它不会打印任何错误,但它与任何文本都不匹配。这可能是正则表达式字符串中的输入错误。您正在打印print($0”)
无论您用双引号写什么,它都将是一个字符串,因此即使在匹配之后,每次都会打印硬编码的$0
。它应该类似于results.forEach{(value)in let range=value.range let matchString=(str作为NSString)。substring(with:range)作为String print(matchString)}