Я никогда не был доволен функциями сопоставления регулярных выражений в CF.Следовательно, я написал свое собственное:
<cfscript>
function reFindNoSuck(string pattern, string data, numeric startPos = 1){
var sucky = refindNoCase(pattern, data, startPos, true);
var i = 0;
var awesome = [];
if (not isArray(sucky.len) or arrayLen(sucky.len) eq 0){return [];} //handle no match at all
for(i=1; i<= arrayLen(sucky.len); i++){
//if there's a match with pos 0 & length 0, that means the mime type was not specified
if (sucky.len[i] gt 0 && sucky.pos[i] gt 0){
//don't include the group that matches the entire pattern
var matchBody = mid( data, sucky.pos[i], sucky.len[i]);
if (matchBody neq arguments.data){
arrayAppend( awesome, matchBody );
}
}
}
return awesome;
}
</cfscript>
Применительно к вашей проблеме, вот мой пример:
<cfset origString = "joe smith <joesmith@domain.com>" />
<cfset regex = "<([^>]+)>" />
<cfset matches = reFindNoSuck(regex, origString) />
Вывод переменной «совпадения» показывает, что это массив с 2 элементами,Первое будет <joesmith@domain.com>
(потому что оно соответствует всему регулярному выражению), а второе будет joesmith@domain.com
(потому что оно соответствует 1-й группе, определенной в регулярном выражении - все последующие группы также будут захвачены и включены в массив).