Лучший способ найти несколько фраз в строке? - PullRequest
1 голос
/ 14 сентября 2010

Я хочу обработать строку, в которой я хочу найти несколько строк, я пытаюсь создать подсветку в HTML-тексте в Java.
Пример:
Найти и обработать фразы table, row, primary key в Each table row contains a primary key column
Текст представляет собой HTML-текст с тегами, такими как <b>,<img..>...
, если в середине фразы для ex.primary <b>key</b> (игнорируемый тег - это тег, который не прерывает текст, означающий, например, <b> или <i>, с другой стороны, тег, такой как <div>, прерывает текстовое значение) фразу можно заменить.
, если одинФраза является подфраза другой фразы, тем дольше имеет более высокий приоритет.напримерища table row и row contains в упомянутом тексте, второй должен быть обработан

Мой первый псевдокод был примерно таким:

for (each phrase)  
  while(tex.hasNext(phrase)) do
    processPhraseInText(text,phrase)
  end-while
end-for

Он работал, но текст былtrarased phrases.count (), и я ищу более быстрый способ обработки всех фраз одновременно

Я хочу попробовать использовать регулярные выражения и сопоставление с образцом для использования в этом.
Я придумалдвумя способами: 1. создать одно регулярное выражение для всех фраз, выглядящих примерно так: regex1|regex2|..|regexN или 2. для создания для каждой фразы одного регулярного выражения (и одного объекта Matcher)

что может быть лучше?или есть какой-то совершенно другой способ или существующая библиотека для этого?разве второй способ со многими совпадениями такой же, как и у моего решения?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2010

Вы можете легко сделать это за один проход. Вам не нужны ключевые слова, так как HTML - это язык, основанный на тегах, но, допустим, вы все равно хотите использовать цвета на основе ключевых слов.

Сохраните все ваши ключевые слова в Trie

Foreach character
  If character is not < send to output 
  If character is <
      Read until you get > (or ' ' if you want to deal with attributes too)
      If prefix is in Trie, colour appropriately and add to output 
0 голосов
/ 14 сентября 2010

Если вы делаете регулярное выражение для каждой фразы, вам все равно придется циклически повторять текст несколько раз.

Если вы сделаете одно регулярное выражение regex1|regex2|..|regexN, вы сможете искать текст за один проход.Это было бы быстрее со многими фразами.

...