| ColdFusion MX | ||
| 目 次 > CFML リファレンス > ColdFusion 関数 > REFind |
|
|
|
|
||
正規表現 (RE) を使用して、パターンに一致する文字列を検索します。この検索では大文字と小文字が区別されます。
正規表現や、そのエスケープシーケンス、アンカー、および修飾子の詳細については、『ColdFusion MX アプリケーションの開発』の第7章「関数での正規表現の使用」 を参照してください。
returnsubexpressions パラメータの値によって異なります。
returnsubexpressions = "False" の場合 : returnsubexpressions = "True" の場合 :len と pos という 2 つの配列を持つ構造体が返されます。配列の要素は次のとおりです。len 配列と pos 配列の先頭の要素には、正規表現全体に一致した最初の部分文字列の長さと位置がそれぞれ格納されます。正規表現の中に括弧でグループ化されている部分がある場合には、後続の各配列要素には、各グループに最初に一致した部分文字列の長さと位置がそれぞれ格納されます。len 配列と pos 配列の先頭の要素には 0 が格納されます。REFind(reg_expression,string[,start] [,returnsubexpressions] )
Find、FindNoCase、REFindNoCase、REReplace、REReplaceNoCase
パラメータ |
説明 |
|---|---|
reg_expression |
検索に使用する正規表現です。大文字と小文字は区別されます。 |
string |
検索対象の文字列、またはそれを含んでいる変数です。 |
start |
オプションです。正の整数、または正の整数を含んでいる変数です。文字列中で検索を開始する位置を指定します。デフォルトは、 1. |
returnsubexpressions |
オプションです。reg_expression に一致した部分文字列を、配列
|
この関数は、文字列内で最初に出現する正規表現を検索します。正規表現、またはその中の部分文字列が 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>
|
|
||
| 目 次 > CFML リファレンス > ColdFusion 関数 > REFind |
|
|
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/coldfusion/6.1_jp/htmldocs2/functa63.htm