我知道我可以使用 [az] 来检查 CF 8 中从 a 到 z 的任何字母。但是,是否有任何正则表达式来检测西班牙字母,如 á、í、ó、é、ñ 等?
提前致谢, 蒙特
我知道我可以使用 [az] 来检查 CF 8 中从 a 到 z 的任何字母。但是,是否有任何正则表达式来检测西班牙字母,如 á、í、ó、é、ñ 等?
提前致谢, 蒙特
ColdFusion 不能很好地处理 Unicode 正则表达式。您可以使用诸如#Chr(375)#
将字符转换为正则表达式字符串之类的方法,但是这样做有点麻烦。
但是,Java 确实可以使用 Unicode,并且由于 CF 可以轻松地使用 Java,因此您可以使用 Java 正则表达式来进行 unicode 匹配。
这将匹配 Java 正则表达式中的单个 Unicode 字母:
\p{L}
有关正则表达式 Unicode 的更多详细信息,请点击此处:http ://www.regular-expressions.info/unicode.html
至于在 CF 中使用 Java 正则表达式,简单的替换就是这样:
<cfset NewString = OldString.replaceAll('\p{L}','ReplaceWith') />
因此,如果您只需要替换字符串,您就可以这样做。
但是,如果您想要匹配(相当于重新匹配)或更复杂的功能,那么最简单的解决方案是使用一个组件,该组件将 Java 正则表达式功能包装到一个易于使用的 CFC 中,并且您可以调用常规 CFML 函数。像jre-utils.cfc
这允许您执行以下操作:
<cfset jre = createObject('component','jre-utils').init() />
<cfset Matches = jre.match( '\p{L}++' , String ) />
这将返回字符串中的(Unicode)单词数组。
最近有一个关于国际 RegExes 的讨论,我现在找不到。我相信目前的情况是正则表达式通常只使用默认的拉丁字母。
试试特殊的“单词字符类”\w
是否适合你。注意:这也将匹配数字。也许你可以用一个例子来说明你想要完成什么?
\w
应该匹配a
,ä
或á
(但也0
)。
\w(?<!\d)
将匹配a
,ä
或á
(但不是0
)。
\w+
会匹配börk
但也l33t
。
\b(?:\w(?<!\d))+\b
将匹配börk
但不匹配l33t
。