2013-06-13 6 views
1

У меня есть фрагмент кода, который присваивает атрибуты NSAttributedString в зависимости от того, присутствуют ли в строке определенные ключевые слова. Другими словами, подсветка синтаксиса.Использование регулярных выражений для выделения синтаксиса

Чтобы найти, если определенная строка содержит эти ключевые слова, я в настоящее время использую регулярные выражения, чтобы найти местоположение этих слов с помощью "\\bKEYWORD\\b". Проблема, очевидно, в производительности.

Сначала я попытался с NSRegularExpression, но производительность была настолько медленной, что прокрутка моего текста была практически невозможна. Затем я попробовал Oniguruma, и все улучшилось, но все равно заметно медленное. Я могу попробовать PCRE, но я не думаю, что добавлю много.

Итак, мой вопрос: как я могу ускорить поиск регулярных выражений? Может быть, кеширование скомпилированного выражения?

ответ

1

Кажется, что вы ищете каждое слово индивидуально. Я хотел бы создать массив поисковых слов, а затем соединить их вместе с регулярным выражением чередованием | символа

Учитывая поисковые слова, как: alpha, bravo, charlie, delta, echo

результате этом выполнили регулярное выражение: \b(?:alpha|bravo|charlie|delta|echo)\b

enter image description here

НЕРАСПРОСТРАНЕНИЕ захвата групповой конструкции (?: ... ) немного быстрее, чем синтаксис захвата ( ... )

+0

Выполнение этого задания и кэширование шаблона привели к значительному повышению производительности. – ruipacheco

+0

Могу ли я спросить, как вы создали изображение в своем ответе? – Dan

Смежные вопросы