ColdFusion - 字符串函数 - 在两个位置之间查找数据

ColdFusion - String Function - Find Data In Between 2 Locations

我正在尝试整理一些字符串工作。

我需要在 "Det:" 和 "Evt:" 之间提取字符串数据 所以只需要返回XXXB04即可。在 Det: 之后总是有一个 space,在 Evt: 之前总是有一个 space。

<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 右边的内容:

此代码适用于您的示例:

<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>

您可以在此处运行:http://trycf.com/gist/865418cb4964ee375619eb316398bd76/acf?theme=monokai

代码解释:
<cfset startpos = findNoCase("Det:", string)> 将指向字符串中 "Det:" 的开头。

Add: This Bit Of Data Det: XXXB04 Evt: F2016999999
                      ^

<cfset startpos = startpos + 4> 我将 4 添加到 startpos 以将位置移到字符串中的 "Det:" 之后。

Add: This Bit Of Data Det: XXXB04 Evt: F2016999999
                          ^

<cfset endpos = findNoCase("Evt:", string)> 将指向字符串中 "Evt:" 的开头。

Add: This Bit Of Data Det: XXXB04 Evt: F2016999999
                                  ^

现在设置好指针后,我们就可以得到这两点之间的字符。
<cfset data = mid(string,startpos,endpos-startpos)>

Add: This Bit Of Data Det: XXXB04 Evt: F2016999999
                          ^^^^^^^^

注意前后的空格也包括在内。可以通过像这样 #trim(data)#.

调用 trim() 函数来删除它们

您可以使用正则表达式和捕获组来获取您想要的字符串部分。例如:

<cfscript>
string = "Add: This Bit Of Data Det: XXXB04 Evt: F2016999999";

det = reReplaceNoCase(string, ".+ Det: ([^ ]+) .+", "");
</cfscript>

<cfoutput>
det: [#det#]
</cfoutput>

那将输出:

det: [XXXB04]

如果你想知道它是如何工作的,那么正则表达式.+ Det: ([^ ]+) .+匹配_anything_ Det:.是任意字符,+表示一个或多个)后跟任何不是 space [^ ]+ 的内容。 () 是一个捕获组,然后您将其称为 .