我正在尝试整理一些字符串工作。
我需要在“Det:”和“Evt:”之间拉出字符串数据 所以只需要返回XXXB04。在Det之后总是有一个空格:在Evt之前有一个空格:。
<cfset string = "Add: This Bit Of Data Det: XXXB04 Evt: F2016999999">
<cfset rpos = findNoCase("Evt:", string)>
<cfset rpiece = (rpos ? left(string, rpos - 1) : string)>
<br>RPIECE???
<br>
<cfoutput>#rpiece#</cfoutput>
<br><br>
<cfset det = "#Listlast(rpiece,"Det:")#">
<cfset final = "#RTrim(det)#">
<cfoutput>#final#</cfoutput>
尝试将其拆分为2个字符串检查...第一个东西 - 我可以摆脱Evt:东西 - 第二个函数不能让我对Det的右边有什么看法:
答案 0 :(得分:4)
您可以使用正则表达式和捕获组来抓取所需字符串的一部分。例如:
<cfscript>
string = "Add: This Bit Of Data Det: XXXB04 Evt: F2016999999";
det = reReplaceNoCase(string, ".+ Det: ([^ ]+) .+", "\1");
</cfscript>
<cfoutput>
det: [#det#]
</cfoutput>
那将输出:
det:[XXXB04]
如果你想知道它是如何工作的,那么正则表达式.+ Det: ([^ ]+) .+
匹配_anything_ Det:
(.
是任何字符,+
表示一个或多个)后跟任何不是空格[^ ]+
的东西。 ()
是一个捕获组,您可以将其称为\1
。
答案 1 :(得分:3)
此代码适用于您的示例:
.foo {
…
display: inline-block;
}
您可以在此处运行:http://trycf.com/gist/865418cb4964ee375619eb316398bd76/acf?theme=monokai
代码解释:
<cfset string = "Add: This Bit Of Data Det: XXXB04 Evt: F2016999999">
<cfset startpos = findNoCase("Det:", string)>
<cfset startpos = startpos + 4>
<cfset endpos = findNoCase("Evt:", string)>
<cfset data = mid(string,startpos,endpos-startpos)>
<cfoutput>
start: #startpos#<br>
end: #endpos#<br>
data: [#data#]<br>
trimmed data: [#trim(data)#]<br>
</cfoutput>
将指向&#34; Det:&#34;在您的字符串中的开头。
<cfset startpos = findNoCase("Det:", string)>
Add: This Bit Of Data Det: XXXB04 Evt: F2016999999
^
我要在startpos中添加四个以将位置移到&#34; Det:&#34;在字符串中。
<cfset startpos = startpos + 4>
Add: This Bit Of Data Det: XXXB04 Evt: F2016999999
^
将指向&#34; Evt:&#34;在你的字符串中。
<cfset endpos = findNoCase("Evt:", string)>
现在我们的指针设置我们只是得到这两点之间的字符
Add: This Bit Of Data Det: XXXB04 Evt: F2016999999
^
<cfset data = mid(string,startpos,endpos-startpos)>
请注意,前后的空格也包括在内。可以通过调用trim {)函数来删除它们,如Add: This Bit Of Data Det: XXXB04 Evt: F2016999999
^^^^^^^^
。