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 [^ ]+
的内容。 ()
是一个捕获组,然后您将其称为
.
我正在尝试整理一些字符串工作。
我需要在 "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)#
.
您可以使用正则表达式和捕获组来获取您想要的字符串部分。例如:
<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 [^ ]+
的内容。 ()
是一个捕获组,然后您将其称为 .