我知道我可以使用a-z来检查CF8中从a到z的任何字母表。但是,有没有正则表达式可以检测西班牙字母表,比如á,í,ó,é,ñ,等等?
先谢谢你,蒙特
发布于 2009-07-21 21:47:32
ColdFusion不能很好地处理Unicode正则表达式。您可以使用诸如#Chr(375)#之类的东西将字符转换为正则表达式字符串,但是这样做有点麻烦。
但是,Java确实可以与Unicode一起使用,而且由于CF可以很容易地利用Java,因此您可以使用Java正则表达式来进行unicode匹配。
这将匹配Java regex中的单个Unicode字母:
\p{L}有关regex Unicode的更多详细信息,请单击此处:http://www.regular-expressions.info/unicode.html
至于在CF中使用Java regex,简单的替换就是这样:
<cfset NewString = OldString.replaceAll('\p{L}','ReplaceWith') />所以,如果你所需要的只是替换字符串,你可以这样做。
但是,如果您需要匹配(相当于重新匹配)或更复杂的功能,那么最简单的解决方案是使用一个组件,该组件将Java regex功能包装到一个易于使用的CFC中,其中包含您可以调用的常规CFML函数。像jre-utils.cfc一样
这允许您执行以下操作:
<cfset jre = createObject('component','jre-utils').init() />
<cfset Matches = jre.match( '\p{L}++' , String ) />它将返回字符串中(Unicode)单词的数组。
发布于 2009-07-21 20:15:40
最近这里有一个关于国际RegExes的讨论,我现在找不到。我认为目前的情况是,正则表达式通常只有缺省的拉丁字母。
发布于 2009-07-21 20:35:53
如果特殊的"word字符类“\w对您有效,请尝试。注意:这也将匹配数字。也许你可以用一个例子来说明你到底想要实现什么?
\w应与a、ä或á (但也与0)匹配。
\w(?<!\d)将匹配a、ä或á (但不匹配0)。
\w+将与börk匹配,但也与l33t匹配。
\b(?:\w(?<!\d))+\b将匹配börk,但不匹配l33t。
https://stackoverflow.com/questions/1161507
复制相似问题