我试图捕捉cstub.c
中使用单词的时间。我已经让它在视图内部的文字中工作了。
问题是视图中的第一个或最后一个字。 到目前为止我的代码:
UITextView
我检查过,发现我应该使用private func filteredTermFor(_ word: String) -> String {
let punctuationFilter = "([\\A|\\W|\\d|\\z| ])"
let wordInParens = "(\(word))"
return punctuationFilter + wordInParens + punctuationFilter
}
作为输入的开头,并使用^
作为输入的结尾。当我添加其中任何一个时,例如:
$
当有问题的词是视图中的第一个或最后一个时,它们似乎没有任何效果。
*为了使我的问题变得冗长,上面函数的返回值被用作"([^|\\A|\\W|\\d|\\z| ])"
:
searchTerm
**编辑**
因为这被标记为重复
如果在没有空格的标点符号或数字旁边键入单词,则报告重复的问题不包括边缘情况。
例如:
func highlightedTextInString(with searchTerm: String, targetString: String) -> NSAttributedString? {
let attributedString = NSMutableAttributedString(string: targetString)
do {
let regex = try NSRegularExpression(pattern: searchTerm, options: .caseInsensitive)
let range = NSRange(location: 0, length: targetString.utf16.count)
for match in regex.matches(in: targetString, options: .withTransparentBounds, range: range) {
let fontColor = UIColor.red
attributedString.addAttribute(NSForegroundColorAttributeName, value: fontColor, range: match.range)
}
return attributedString
} catch _ {
print("Error creating regular expression")
return nil
}
}
,.word
,word9
答案 0 :(得分:1)
请注意,var r = await a + await b;
是一个捕获组(([^|\\A|\\W|\\d|\\z| ])
),其中包含与其中定义的单个char匹配的character class。 (...)
之后的^
使类成为否定,并且它匹配任何字符,但是匹配集合中定义的字符。因此,[
匹配[^|\\A|\\W|\\d|\\z| ]
以外的单个字符(它不再是字符类中的替换运算符),|
(前面的A
不被考虑,省略),非单词字符,数字,\
和空格。它effectively matches z
以及_
和A
以外的任何字母。
您声明您需要匹配的字词可能出现在字词边界或数字中。
您可以使用
z
请参阅regex demo。
在这里,return "(?<![^\\W\\d])(\(word))(?![^\\W\\d])"
是一个负面的后视,它匹配一个非紧接在非字和数字字符之外的字符的位置。这听起来很麻烦,但这里的要点是"(?<![^\\W\\d])"
匹配与[^\W\d]
相同的文本,不包括数字(\w
匹配字母,数字和\w
。所以_
1}}确保在单词之前有一个字符串的开头或非字母和非"(?<![^\\W\\d])"
字符。如果在_
之后允许单词匹配,只需使用_
(其中(?<!\\p{L})
匹配任何Unicode字母)。
\p{L}
是一个负向前瞻,确保字符串的结尾或非字母和非"(?![^\\W\\d])"
(可能有标点符号,符号和数字)紧靠右侧这个单词。同样,如果您希望匹配跟随并使用_
的单词,则可以将此前瞻替换为_
(在允许该单词后不再使用任何字母)。< / p>