2013-11-22 32 views
4

我有一個巨大的字符串list(我將限制例如一行)的格式:ColdFusion的正則表達式

"[First Name] [Last Name] <[email address]>" 

我跑字符串正則表達式來限定到一個數組此。

<cfset x = REMatch("<(.*?)>",list) /> 

這工作得很好,但它也返回尖括號<>在email地址

x[1] = <[email address]> 

只是爲了簡單起見,因爲cfdocs相當正則表達式的曖昧,我寫了這個循環刪除每個索引的第一個和最後一個字符..

<cfloop from="1" to="#arrayLen(x)#" index="y"> 
    <cfset a = #RemoveChars(x[y], 1, 1)# /> 
    <cfset a = #left(a,len(a)-1)# /> 
    <cfset x[y] = a /> 
</cfloop> 

這工作正常,耶,我現在有我的數組。

但是,這不是我想要的。我怎樣才能返回的電子郵件地址沒有尖括號包括在第一位?

(請注意,我也嘗試過REReplaceREFind只返回發生之指數)

(另請注意,有沒有[]括號中的字符串中,這只是說裏面的價值是不是我貼這裏)

回答

4

Coldfusion實現了一個正則表達式(Apache ORO,see this answer for details),它不支持lookbehind assertions,在這種情況下這將很有用。

但我們可以近似得出:

<cfset x = REMatch("[^<>]+(?=>)",list) /> 

應該工作,只要所有尖括號發生在嵌套的,平衡的對。

說明:

[^<>]+ # Match one or more characters except angle brackets 
(?=>) # Make sure the next character is a closing angle bracket 
+0

準確地說,CF的實現是[阿帕奇ORO(https://jakarta.apache.org/oro/),這是一種不同的實現對ECMAScript的(雖然他們都缺乏後顧之憂)。 –

+0

完美的工作,並感謝您的解釋。我不知道在這之前有什麼後顧之憂這個 –

+0

@PeterBoughton:哦,我不知道 - [感謝這個答案](http://stackoverflow.com/a/10842450/20670)! –