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

时间:2016-04-20 15:03:27

标签: string coldfusion find coldfusion-9

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

我需要在“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的右边有什么看法:

2 个答案:

答案 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 ^^^^^^^^