REFIND | |
説明
正規表現 (RE) を使用して、パターンに一致する文字列を検索します。この検索では大文字と小文字が区別されます。 正規表現や、そのエスケープシーケンス、アンカー、および修飾子の詳細については、『ColdFusion MX 開発ガイド』の第7章の「関数での正規表現の使用」 を参照してください。 |
|
戻り値
returnsubexpressions パラメータの値により異なります。
|
|
カテゴリ
文字列関数 |
|
関数のシンタックス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> <CFSET st = REFind("[[:alpha:]]",testString,1,"TRUE")> <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>次に例を示します。 <CFSET st1 = REFind("([[:alpha:]])[]+(1)",testString,1,"TRUE")></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 として返
すかどうかを指定するブール値です。
|