Returning matched subexpressions
155
To find the second occurrence of the string, you must know that the first string occurred at index
5 and that the string’s length was 5. However,
REFind
only returns starting index of the string,
not its length. So, you either must know the length of the matched string to call
REFind
the
second time, or you must use subexpressions in the regular expression.
The
REFind
and
REFindNoCase
functions let you get information about matched subexpressions.
If you set these functions’ fourth parameter,
ReturnSubExpression
, to True, the functions
return a CFML structure with two arrays,
pos
and
len
, containing the positions and lengths of
text strings that match the subexpressions of a regular expression, as the following example shows:
<cfset sLenPos=REFind("
BIG
", "Some BIG BIG string", 1, "
True
")>
<cfoutput>
<cfdump var="#sLenPos#">
</cfoutput><br>
The following figure shows the output of the
cfdump
tag:
Element one of the
pos
array contains the starting index in the search string of the string that
matched the regular expression. Element one of the
len
array contains length of the matched
string. For this example, the index of the first " BIG " string is 5 and its length is also 5. If there
are no occurrences of the regular expression, the
pos
and
len
arrays each contain one element
with a value of 0.
You can use the returned information with other string functions, such as
mid
. The following
example returns that part of the search string matching the regular expression:
<cfset myString="Some BIG BIG string">
<cfset sLenPos=REFind("
BIG
", myString, 1, "
True
")>
<cfoutput>
#mid(myString, sLenPos.pos[1], sLenPos.len[1])#
</cfoutput>
Each additional element in the
pos
array contains the position of the first match of each
subexpression in the search string. Each additional element in
len
contains the length of the
subexpression’s match.
In the previous example, the regular expression " BIG " contained no subexpressions. Therefore,
each array in the structure returned by
REFind
contains a single element.
After executing the previous example, you can call
REFind
a second time to find the second
occurrence of the regular expression. This time, you use the information returned by the first call
to make the second:
<cfset newstart = sLenPos.pos[1] + sLenPos.len[1] - 1>
<!--- subtract 1 because you need to start at the first space --->
<cfset sLenPos2=REFind("
BIG
", "Some BIG BIG string", newstart, "True")>
<cfoutput>
<cfdump var="#sLenPos2#">
</cfoutput><br>
Содержание COLDFUSION MX 61-DEVELOPING COLDFUSION MX
Страница 1: ...Developing ColdFusion MX Applications...
Страница 22: ...22 Contents...
Страница 38: ......
Страница 52: ...52 Chapter 2 Elements of CFML...
Страница 162: ......
Страница 218: ...218 Chapter 10 Writing and Calling User Defined Functions...
Страница 250: ...250 Chapter 11 Building and Using ColdFusion Components...
Страница 264: ...264 Chapter 12 Building Custom CFXAPI Tags...
Страница 266: ......
Страница 314: ...314 Chapter 14 Handling Errors...
Страница 344: ...344 Chapter 15 Using Persistent Data and Locking...
Страница 349: ...About user security 349...
Страница 357: ...Security scenarios 357...
Страница 370: ...370 Chapter 16 Securing Applications...
Страница 388: ...388 Chapter 17 Developing Globalized Applications...
Страница 408: ...408 Chapter 18 Debugging and Troubleshooting Applications...
Страница 410: ......
Страница 426: ...426 Chapter 19 Introduction to Databases and SQL...
Страница 476: ...476 Chapter 22 Using Query of Queries...
Страница 534: ...534 Chapter 24 Building a Search Interface...
Страница 556: ...556 Chapter 25 Using Verity Search Expressions...
Страница 558: ......
Страница 582: ...582 Chapter 26 Retrieving and Formatting Data...
Страница 668: ......
Страница 734: ...734 Chapter 32 Using Web Services...
Страница 760: ...760 Chapter 33 Integrating J2EE and Java Elements in CFML Applications...
Страница 786: ...786 Chapter 34 Integrating COM and CORBA Objects in CFML Applications...
Страница 788: ......
Страница 806: ...806 Chapter 35 Sending and Receiving E Mail...