【发布时间】:2010-10-06 14:20:59
【问题描述】:
我正在尝试匹配这个我可以用 alt-0146 键入的字符。 Word 告诉我它是 unicode 0x2019,但我似乎无法使用 ColdFusion 中的正则表达式匹配它。这是我用来匹配 2 到 10 个字母和撇号以及这个字符的 sn-p
[[:alpha:]'\x2019]{2,10}
但它不起作用。有什么想法吗?
【问题讨论】:
标签: regex unicode coldfusion
我正在尝试匹配这个我可以用 alt-0146 键入的字符。 Word 告诉我它是 unicode 0x2019,但我似乎无法使用 ColdFusion 中的正则表达式匹配它。这是我用来匹配 2 到 10 个字母和撇号以及这个字符的 sn-p
[[:alpha:]'\x2019]{2,10}
但它不起作用。有什么想法吗?
【问题讨论】:
标签: regex unicode coldfusion
看起来 CF 中的 \x 简写只支持前 255 个 ASCII 字符。为了超过这个数字,你需要像这样使用 chr 命令内联:
<cfscript>
yourString = "’";
result = refind("[[:alpha:]'" & chr(8217) & "]{2,10}", yourString);
writeOutput(result);
</cfscript>
这应该给你一个匹配。
【讨论】:
您可以尝试的另一件事是直接包含字符:
[[:alpha:]'#Chr(8217)#]{2,10}
但是我不确定这是否适用于 CF 正则表达式。如果没有,您仍然可以选择在 CF 中使用 Java 正则表达式。这很容易做到,并且使您能够使用范围更广的正则表达式功能,几乎可以肯定包括 unicode 支持。
如果要进行替换,可以直接对 CF 字符串执行 Java 正则表达式,例如:
<cfset NewString = OrigString.replaceAll( 'ajavaregex' , 'replacement' )/>
对于其他功能(例如,获取匹配数组、替换回调函数),我创建了 Java RegEx Utilities - 一个将这些功能简化为单个函数调用的单个组件。
【讨论】: