在Delphi 2009或更高版本(Unicode)中,是否有任何内置函数或小程序在某处编写,可以进行合理有效的全字搜索,其中提供定义单词的分隔符,例如:
function ContainsWord(Word,Str: string): boolean; const { Delim holds the delimiters that are on either side of the word } Delim = ' .;,:(){}"/\<>!?[]'#$91#$92#$93#$94'-+*='#$A0#$84;
哪里:
Word: string; { is the Unicode string to search for } Str: string; { is the Unicode string to be searched }
如果“Word”在字符串中,我只需要它返回true或false值.
在某个地方必定有这样的东西,因为标准的查找对话框具有“仅匹配整个单词”作为其中一个选项.
这通常(或最好)如何实施?
结论:
RRUZ的答案很完美. SearchBuf例程正是我所需要的.我甚至可以进入StrUtils例程,提取代码,并根据我的要求进行修改.
我很惊讶地发现SearchBuf不首先搜索该单词然后检查分隔符.相反,它一次查找字符串的字符,寻找分隔符.如果找到一个,则检查字符串和另一个分隔符.如果找不到,则查找另一个分隔符.为了效率,这非常聪明!
解决方法
您可以使用[soWholeWord]选项使用
SearchBuf功能.
function SearchBuf(Buf: PAnsiChar; BufLen: Integer; SelStart: Integer; SelLength: Integer; SearchString: AnsiString; Options: TStringSearchOptions): PAnsiChar;
看这个例子
function ExistWordInString(aString:PWideChar;aSearchString:string;aSearchOptions: TStringSearchOptions): Boolean; var Size : Integer; Begin Size:=StrLen(aString); Result := SearchBuf(aString,Size,aSearchString,aSearchOptions)<>nil; End;
以这种方式使用它
ExistWordInString('Go Delphi Go','Delphi',[soWholeWord,sodown]);
再见.
原文地址:https://www.jb51.cc/delphi/101688.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。