在字符串中查找多个短语的最佳方法?

时间:2010-09-14 07:52:39

标签: java performance string pattern-matching

我想处理一个String,我想在其中找到多个字符串,我想在java中用html文本制作一些荧光笔..
例如:
table, row, primary key中查找并处理短语Each table row contains a primary key column 文本是带有<b>,<img..>...的标签的html文本 如果在前面的短语中间有可忽略的标记。 primary <b>key</b>(可忽略标记是不会中断文本含义的标记,如<b><i>,另一方面标记如<div>会中断文本含义)被替换。
如果一个短语是其他短语的子短语,则该短语具有更高的优先级。对于前在提到的文本中搜索table rowrow contains,第二个应该被处理

我的第一个伪代码是这样的东西:

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

它正在运行,但是文本遍历了phrase.count()次,我正在寻找一种更快的方法来立即处理所有的赞美

我想尝试使用正则表达式和模式匹配器。
我想出了两种方法, 1。为所有看起来像这样的短语创建一个正则表达式:regex1|regex2|..|regexN 2。为每个短语创建一个正则表达式(和一个匹配器对象)

可能是更好的方法?或者是否有一些完全不同的方式或现有的库?不是第二种方式,许多匹配器就像我已经拥有的溶剂一样吗?

2 个答案:

答案 0 :(得分:0)

如果你为每个短语制作一个正则表达式,你仍然需要在文本上循环几次。

如果您制作一个正则表达式regex1|regex2|..|regexN,则可以一次性搜索文本。 许多短语会更快。

答案 1 :(得分:0)

您可以一次性轻松完成。您不需要关键字,因为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