REFIND  
説明

正規表現 (RE) を使用して、パターンに一致する文字列を検索します。この検索では大文字と小文字が区別されます。

正規表現や、そのエスケープシーケンス、アンカー、および修飾子の詳細については、『ColdFusion MX 開発ガイド』の第7章の「関数での正規表現の使用」 を参照してください。

 
戻り値

returnsubexpressions パラメータの値により異なります。

  • returnsubexpressions = "False" の場合 :
    • 文字列中で一致した文字列の先頭位置が返されます。
    • 指定した正規表現に一致する部分が文字列中にない場合は 0 が返されます。
  • returnsubexpressions = "True" の場合 : len と pos という 2 つの配列を持つ構造体が返されます。配列の要素は次のとおりです。
    • 指定した正規表現に一致する部分が文字列中にあった場合、len 配列と pos 配列の先頭の要素には、正規表現全体に一致した最初の部分文字列の長さと位置がそれぞれ格納されます。
      正規表現の中に括弧でグループ化されている部分がある場合、後続の各配列要素には、各グループに最初に一致した部分文字列の長さと位置がそれぞれ格納されます。
    • 指定した正規表現に一致する部分が見つからなかった場合、len 配列と pos 配列の先頭の要素には 0 が格納されます。
 
カテゴリ

文字列関数

 
関数のシンタックス
REFind(reg_expression, string [, start ]    [, returnsubexpressions ] )
 
関連項目

Find、FindNoCase、REFindNoCase、REReplace、REReplaceNoCase

 
パラメータ

 
使用方法

この関数は、文字列内で最初に出現する正規表現を検索します。正規表現、またはその中の部分文字列が 2 回め以降に出現する箇所を検索するには、この関数を複数回、そのつど開始位置を変えて呼び出します。次回の開始位置を決定するには、returnsubexpressions パラメータを使用し、len 配列と pos 配列のそれぞれの先頭要素に返された値の和を求めます。

 
<h3>REFind の例</h3>
<p>この例では、REFind 関数の使用法を、<i>returnsubexpressions</i> パラメータを true に設定する場合
としない場合のそれぞれについて示します。 
<i>returnsubexpressions</i> パラメータを使わない場合、REFind 関数は文字列内の指定位置以降を検索
し、正規表現に一致する部分の最初の出現位置を返します。 
一致する部分が見つからなかった場合は 0 を返します。</p>

<p>REFind("a+c+", "abcaaccdd"):   
<cfoutput>#REFind("a+c+", "abcaaccdd")#</cfoutput></p>
<p>REFind("a+c*", "abcaaccdd"):   
<cfoutput>#REFind("a+c*", "abcaaccdd")#</cfoutput></p>
<p>REFind("[[:upper:]]", "abcaacCDD"):   
<cfoutput>#REFind("[[:upper:]]", "abcaacCDD")#</cfoutput></p>
<p>REFind("[?&]rep = ", "report.cfm?rep = 1234&u = 5"):
   <cfoutput>#REFind("[?&]rep = ", "report.cfm?rep = 1234&u = 5")#
   </cfoutput>
</p>
<!--- 開始位置を 1 に、returnsubexpressions を TRUE に設定 --->
<hr size = "2" color = "#0000A0">
<p><i>returnssubexpression</i> パラメータを使う場合、REFind 関数は文字列内の指定位置以降を検索し、
正規表現に一致する部分の最初の出現位置および長さを返します。一致する各部分の位置と長さは、すべて 1 つの
構造体に格納されます。これらの情報を取り出すには、<i>pos</i> キーと <i>len</i> キーをそれぞれ使用し
ます。</p>
<cfset teststring = "The cat in the hat hat came back!">
<p>この関数が検索する対象の文字列 :
<cfoutput><b>#teststring#</b></cfoutput></p>
<p>この文字列内を検索する最初の REFind 呼び出し :
      <b>REFind("[A-Za-z]+",testString,1,"TRUE")</b></p>
<p>この関数は、pos と len という2 つの配列を持つ構造体を返します。</p>
<p>この構造体は、CFSET ステートメントを使用して作成できます。次に例を示します。</p>
&lt;CFSET st = REFind("[[:alpha:]]",testString,1,"TRUE")&gt;
<cfset st = REFind("[[:alpha:]]",testString,1,"TRUE")>
<p>
   <cfoutput>
   各配列の要素数 : #ArrayLen(st.pos)#
   </cfoutput></p>
<p><b>正規表現内で括弧を使わない場合、pos 配列と len 配列の要素数は常に 1 になります。</b></p>
<p>st.pos[1] の値 : <cfoutput>#st.pos[1]#</cfoutput></p>
<p>st.len[1] の値 : <cfoutput>#st.len[1]#</cfoutput></p>
<p>   
<cfoutput>
   部分文字列は <b>[#Mid(testString,st.pos[1],st.len[1])#]</B> です。
   </cfoutput></p>
<hr size = "2" color = "#0000A0">
<p>一方、正規表現内で括弧を使った場合は、配列の先頭要素には、正規表現全体に最初に一致した部分の位置と長さ
が格納されます。括弧で囲まれた各グループに最初に一致した部分の位置と長さは、2 番め以降の配列要素に格納
されます。</p>
<p>次に例を示します。 
&lt;CFSET st1 = REFind("([[:alpha:]])[]+(1)",testString,1,"TRUE")&gt;</p>
<cfset st1 = REFind("([[:alpha:]]+)[ ]+(1)",testString,1,"TRUE")>
<p>各配列の要素数 : <cfoutput>#ArrayLen(st1.pos)#
</cfoutput></p>
<p>正規表現全体に最初に一致した位置は 
   <cfoutput>#st1.pos[1]#、
      長さは #st1.len[1]# です。正規表現全体に一致した文字列は次のとおりです。
      <B>[#Mid(testString,st1.pos[1],st1.len[1])#]</B>
   </cfoutput></p>
<p>2 番め以降の配列要素は、括弧で囲まれた各グループに一致する部分が最初に出現した位置と長さを表します。
</p>
 <cfloop index = "i" from = "2" to = "#ArrayLen(st1.pos)#">
   <p><cfoutput>位置は #st1.pos[i]#、長さは #st1.len[i]# です。
部分文字列は <B>[#Mid(testString,st1.pos[i],st1.len[i])#]
</B> です。</cfoutput></p>
</cfloop><br> 
REG_EXPRESSION  
検索に使用する正規表現です。大文字と小文字が区別されます。
STRING  
検索対象の文字列、またはそれを含んでいる変数です。
START  
オプションです。正の整数、または正の整数を含んでいる変数です。文字列中で検索を開 始する位置を指定します。デフォルト値は 1 です。
RETURNSUBEXPRESSIONS  
オプションです。reg_expression に一致した部分文字列を、配列 len および pos として返 すかどうかを指定するブール値です。
  • true: 正規表現に一致する部分が見つかった場合、その長さと位置が、両配列の先頭要素にそれぞれ格納されます。
    正規表現の中に括弧でグループ化されている部分がある場合、後続の各配列要素には、各グループに最初に一致した部分文字列の長さと位置がそれぞれ格納されます。
    正規表現に一致する部分が見つからなかった場合、両配列の要素数は 1 となり、要素の値として 0 が格納されます。
  • false: 文字列内で正規表現に一致した部分の先頭位置が返されます (デフォルト)。