【问题标题】:How do you reference unicode characters in ColdFusion regex?您如何在 ColdFusion 正则表达式中引用 unicode 字符?
【发布时间】:2010-10-06 14:20:59
【问题描述】:

我正在尝试匹配这个我可以用 alt-0146 键入的字符。 Word 告诉我它是 unicode 0x2019,但我似乎无法使用 ColdFusion 中的正则表达式匹配它。这是我用来匹配 2 到 10 个字母和撇号以及这个字符的 sn-p

[[:alpha:]'\x2019]{2,10}

但它不起作用。有什么想法吗?

【问题讨论】:

    标签: regex unicode coldfusion


    【解决方案1】:

    看起来 CF 中的 \x 简写只支持前 255 个 ASCII 字符。为了超过这个数字,你需要像这样使用 chr 命令内联:

    <cfscript>
       yourString = "’";
       result = refind("[[:alpha:]'" & chr(8217) & "]{2,10}", yourString);
       writeOutput(result);
    </cfscript>
    

    这应该给你一个匹配。

    【讨论】:

      【解决方案2】:

      您可以尝试的另一件事是直接包含字符:

      [[:alpha:]'#Chr(8217)#]{2,10}
      


      但是我不确定这是否适用于 CF 正则表达式。如果没有,您仍然可以选择在 CF 中使用 Java 正则表达式。这很容易做到,并且使您能够使用范围更广的正则表达式功能,几乎可以肯定包括 unicode 支持。

      如果要进行替换,可以直接对 CF 字符串执行 Java 正则表达式,例如:

      <cfset NewString = OrigString.replaceAll( 'ajavaregex' , 'replacement' )/>
      


      对于其他功能(例如,获取匹配数组、替换回调函数),我创建了 Java RegEx Utilities - 一个将这些功能简化为单个函数调用的单个组件。

      【讨论】:

      • 谢谢。我正在做匹配/数据验证,并不能真正改变验证代码以使用你方便的实用程序:/
      • @Peter,这是某人最近编写的一个函数,用于替换 M$ 喜欢在其应用程序中输出的许多 unicode。此解决方案使用您建议的 java replaceAll() 函数。我只是把它放在这里,以防将来有人发现它有用:gist.github.com/JamoCA/6f35220d47caa7fdbf75eb884ff1cec7
      猜你喜欢
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 2011-03-02
      相关资源
      最近更新 更多