Tôi chưa bao giờ hài lòng với biểu hiện thường xuyên phù hợp với chức năng trong CF. Do đó, tôi đã viết của riêng tôi:
<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>
Áp dụng cho vấn đề của bạn, đây là ví dụ của tôi:
<cfset origString = "joe smith <[email protected]>" />
<cfset regex = "<([^>]+)>" />
<cfset matches = reFindNoSuck(regex, origString) />
bán phá giá là "phù hợp" biến cho thấy rằng nó là một mảng với 2 mặt hàng này. Đầu tiên sẽ là <[email protected]>
(vì nó khớp với toàn bộ regex) và thứ hai sẽ là [email protected]
(vì nó khớp với nhóm thứ nhất được xác định trong cụm từ thông dụng - tất cả các nhóm tiếp theo cũng sẽ được chụp và đưa vào mảng).
Nguồn
2010-06-15 15:57:43
Làm thế nào về bạn cho chúng tôi biết những gì bạn đã thử và không hoạt động? Nó dễ dàng hơn để đi từ đó ... – jhwist