Coldfusion ReReplace电话号码重新格式化

时间:2014-12-18 19:47:28

标签: regex string coldfusion

我试图从.pdf文件重新格式化电话号码目录。 我提取了所有文字,所有电话号码都采用这种格式( 555 ) 555 - 555 我想将它们放在5555555555中,然后是<br> 我想过 #ReReplace(Directory, "\(.*?.\).*?.\-.*?", "", "all")#但它离开了空格,我无法获得<br>。 我走错了路吗?

是否可以使用Rematch返回一个将字符串拆分为

的数组
["some string ( 555 ) 555 - 555", "some string ( 555 ) 555 - 555", "some string ( 555 ) 555 - 555"] 

2 个答案:

答案 0 :(得分:2)

试试这个 - 使用捕获组和反向引用,我们可以提取数字

#ReReplace(Directory, "\(\s*(\d+)\s*\)\s*(\d+)\s*-\s*(\d+)", "\1\2\3<br>", "all")#

答案 1 :(得分:1)

我有点希望有人会有更好的解决方案,但

你可以这样做来将匹配加载到数组中,用值后缀(我选择“ENDPN”)并使用带有ReMatch的前瞻来检查后缀,这样它就不会随机拾取10数字串。 CF(至少10个)本身不支持lookbehinds,但它确实支持前瞻。您可以调用Java来执行此操作,但这里没有必要。

Lookaheads允许您断言模式在表达式之后(向前看),而不捕获它。 Lookbehinds允许在字符串之前检查支持它的语言,例如Java。

如果没有其他10位数字符串的危险,所有这些都是不必要的。

<cfset Directory = '["some string ( 555 ) 555 - 5768", "some string ( 555 ) 555 - 1234", "some string ( 555 ) 555 - 0101"]'>

<cfset ParseNums = ReReplace(Directory, "\(\s*(\d{3})\s*\)\s*(\d{3})\s*-\s*(\d{4})", "\1\2\3ENDPN", "all")>

<cfset ArrNums = ReMatch("\d{10}(?=ENDPN)",ParseNums)>

<cfdump var="#ArrNums#">

如果您仍想在捕获中使用<br />

<cfset Directory = '["some string ( 555 ) 555 - 5768", "some string ( 555 ) 555 - 1234", "some string ( 555 ) 555 - 0101"]'>

<cfset ParseNums = ReReplace(Directory, "\(\s*(\d{3})\s*\)\s*(\d{3})\s*-\s*(\d{4})", "\1\2\3<br />ENDPN", "all")>

<cfset ArrNums = ReMatch("\d{10}<br \/>(?=ENDPN)",ParseNums)>

<cfdump var="#ArrNums#">