使用正则表达式进行语法高亮

时间:2013-06-13 09:22:55

标签: objective-c regex macos nsregularexpression

我有一段代码将属性分配给NSAttributedString,具体取决于字符串中是否存在某些关键字。换句话说,语法高亮。

要查找某个字符串是否包含这些关键字,我当前正在使用正则表达式来查找"\\bKEYWORD\\b"这些字词的位置。问题显然是表现。

我首先尝试使用NSRegularExpression,但性能太慢,以至于滚动我的textview几乎是不可能的。然后我尝试了Oniguruma并且事情有所改善,但它仍然明显缓慢。我可以试试PCRE,但我认为我不会增加太多。

所以,我的问题是:如何加快正则表达式搜索?也许缓存已编译的表达式?

1 个答案:

答案 0 :(得分:1)

听起来你正在单独搜索每个单词。我会创建一个搜索单词数组,然后将它们与正则表达式交替|符号连接在一起

给出搜索词:alpha, bravo, charlie, delta, echo

得到的符合正则表达式:\b(?:alpha|bravo|charlie|delta|echo)\b

enter image description here

非捕获组构造(?: ... )比捕获语法(快一点...... )