我有一个巨大的字符串 list
(我将示例限制为一行),格式为:
"[First Name] [Last Name] <[email address]>"
我在字符串上运行了一个正则表达式来将它分隔成一个数组。
<cfset x = REMatch("<(.*?)>",list) />
这工作正常,除了它还返回尖括号
<>
在电子邮件地址周围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>
这很好用,是的,我现在有了我的阵列。
然而,这不是我想要的。如何返回没有包含在首位的尖括号的电子邮件地址?
(请注意我也试过
REReplace
和 REFind
只返回发生的索引)(还要注意,字符串中没有
[]
括号,这只是说明里面的值不是我在这里发布的)
最佳答案
Coldfusion 实现了不支持 see this answer for details 的正则表达式风格(Apache ORO,lookbehind assertions)这在这种情况下会很有用。
但我们可以得出一个近似值:
<cfset x = REMatch("[^<>]+(?=>)",list) />
只要所有尖括号都以未嵌套的平衡对出现,就应该可以工作。
说明:
[^<>]+ # Match one or more characters except angle brackets
(?=>) # Make sure the next character is a closing angle bracket
关于regex - Coldfusion 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20150721/