如何在NSIS中拆分字符串

4

字符串 "jdbc:postgresql://localhost:5432/DatabaseName"

我的需求是从上面的字符串中仅获取数据库名

我尝试了以下链接,但它并没有起作用。

${Explode} $0 "jdbc:postgresql://localhost:5432/" "$v1" 

出现了无效命令错误。

http://nsis.sourceforge.net/Explode

在NSIS语言中如何解决此问题,由于我对NSIS语言不太熟悉,请帮忙解决。提前感谢。


当我将函数定义从提到的网站复制到脚本中时,它开始对我起作用。 - Tomáš Dejmek
3个回答

5
如果你只需要获取最后一个/之后的字符串,你可以使用一些基本的NSIS字符串处理方法:
Section

StrCpy $0 "jdbc:postgresql://localhost:5432/DatabaseName"
StrCpy $1 0
loop:
    IntOp $1 $1 - 1 ; Character offset, from end of string
    StrCpy $2 $0 1 $1 ; Read 1 character into $2, -$1 offset from end
    StrCmp $2 '/' found
    StrCmp $2 '' stop loop ; No more characters or try again
found:
    IntOp $1 $1 + 1 ; Don't include / in extracted string
stop:
StrCpy $2 $0 "" $1 ; We know the length, extract final string part
DetailPrint "|$2|"

SectionEnd

谢谢,不过NSIS对很多程序员来说都很难懂。如果您能解释一下循环的作用,那就太好了,这样其他人就可以根据自己的需求采用这个例子。例如,这是一个反向for循环吗?这是它如何找到最后一个“/”吗?如果是,那么循环怎么抓取每个字符?字符串(字符数组)是否像计数器一样工作? - tresf
1
@tresf 是的,它每次读取一个字符,从末尾开始,并在该字符(在$2中)匹配时停止。当您给出负的起始偏移量时,StrCpy会执行此操作。 - Anders

0
你应该尝试一下NSISpcre插件, 也许你需要一些恶心的正则表达式 :p

我对NSIS语言不是很熟悉。请问您能否建议我如何在我的代码中使用该函数? - user3337109
嗯,我不使用Windows操作系统,无法帮助你解决这个问题,但你可以尝试创建一个示例NSIS脚本和插件,并将其与所需的字符串行一起使用。一旦你理解了这个思路,就可以将其放入你的主要脚本中。NSIS大多数情况下都是学习、尝试、试错的过程。 - Joel

0

WordFind 函数可以帮助你实现这个功能,看一下它的示例吧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接