Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.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 NSRegularExpression中的排除模式_Ios_Swift_Nsregularexpression - Fatal编程技术网

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)}