2

我知道我可以使用 [az] 来检查 CF 8 中从 a 到 z 的任何字母。但是,是否有任何正则表达式来检测西班牙字母,如 á、í、ó、é、ñ 等?

提前致谢, 蒙特

4

3 回答 3

3

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)单词数组。


于 2009-07-21T21:47:31.567 回答
0

最近有一个关于国际 RegExes 的讨论,我现在找不到。我相信目前的情况是正则表达式通常只使用默认的拉丁字母。

于 2009-07-21T20:15:39.660 回答
0

试试特殊的“单词字符类”\w是否适合你。注意:这也将匹配数字。也许你可以用一个例子来说明你想要完成什么?

\w应该匹配aäá(但也0)。

\w(?<!\d)将匹配aäá(但不是0)。

\w+会匹配börk但也l33t

\b(?:\w(?<!\d))+\b将匹配börk但不匹配l33t

于 2009-07-21T20:35:52.787 回答