多字符串全文匹配替换算法 如何做

多字符串全文匹配替换算法 怎么做
目前用的 
stringreplace
 在替换一条时很好用,但要有多条的话,
for i:=0 to xx do
begin
 stringreplace....
end;
发现在要匹配的子串很多,比如说上万 十万之类。会特别慢。 用fastreplace也不理想。 因为每替换一次就要把全文扫一变。每个子串扫一次,子串多了会特别慢。
貌似有个AC 叫多模式匹配 ??自己水平有限,没法实现。求大侠给点示例代码实现快速超多子串替换。。。思路也可以~~~

------解决方案--------------------
delphi中,也有正则表达式控件的,对字串匹配,它的算效率应该可以
其中之一
http://www.regular-expressions.info/delphi.html
你可试一下

------解决方案--------------------
查找的数量较少的时候还是用正则吧,如果一定要自己写的话


最简单的方法是自己遍历:
Delphi(Pascal) code

//srcStr:原始字符串
//targetStr:替换后的结果
//fundStrArray:需要搜索的子串数组
//replaceStrArray:对应的需要替换成为的字串数组
srcIndex:= 1;
targetStr:= "";
while srcIndex <= length(srcStr) do
begin
  replaced:= false;
  for i:=0 to length(fundStrArray)-1
  begin
    if copy(srcStr,srcIndex, length(fundStrArray[i]))= fundStrArray[i] then
    begin
      targetStr:= targetStr+replaceStrArray[i];
      replaced:= true;
      srcIndex:= srcIndex+length(fundStrArray[i]);
      break;
    end ;
  end;
  if not replaced then
    targetStr:= targetStr+copy(srcStr,srcIndex,1);
end;

------解决方案--------------------
如果最短的子串比较长,最好是子串一样长。
我的办法就是用哈希表了,把子串头n(应该3个以上,最好和最短子串一样长)个字节对应到一个数量远大于子串数的哈希表里。
然后用一个n个字节的窗口来对要查找的字符串求哈希函数值。
然后你应该会了吧。