Delphi :高级字符串搜索命令

lb3vh1jj  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(159)

Kenneth是字符串。假设它包含'justabcsome123texthaha'

  • 我已经知道了:*

要查找文本,请执行以下操作:

if(pos('bcsome12',Kenneth) > 0) then

检查长度:

if(Length('Kenneth') > 10) then

问题1:
我想找到'texthaha',但前提是它位于字符串的末尾。

if(pos('texthaha',Kenneth) > 0) then

它可以在任何地方找到,即使它在中间。有简单的方法吗?
问题二:
有没有一种简单的搜索方法,但是使用*(中间的任何字符)?
例如,如果我想搜索bcsome1*3text,我不在乎*是什么字符。我想应该叫“小”,对吧?

if(pos('bcsome1'*'3text',Kenneth) > 0) then

我知道上面的方法行不通。但是有没有类似的方法呢?**编辑:可能重要:使用的 Delphi 版本很旧,不确定版本,但它是2006年的。

zmeyuzjn

zmeyuzjn1#

StrUtils单元中有函数EndsStr()EndsText()(后者不区分大小写
但是,你可以很容易地用已知的函数提供所需的功能(Pos也有一个重载版本,在新的 Delphi 中有第三个参数):

NPos =  Length(S) - Length(Sub) + 1;
if PosEx(Sub, S, NPos) = NPos then...

或@Sertac Akyuz提出的变体:

if Copy(S, NPos, Length(Sub)) = Sub ...

第二个问题可以用类似MatchesMask()的函数来解决。

if MatchesMask(Kenneth, '*bcsome1*3text*')...
mwg9r5ms

mwg9r5ms2#

要获取最后一次出现的值,请尝试LastDelimiter(参见help)。有关通配符,请参阅post

相关问题