tryhi 发表于 2011-3-14 22:23:51

AU3的正则无法使用\u来匹配么?

本帖最后由 tryhi 于 2011-3-14 23:26 编辑

\un         匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)\u4E00匹配汉字的“一”字

测试了好几个汉字的匹配,都失败,比如中文“一”的匹配#Include <Array.au3>
$s = StringRegExp("一二三","\u4E00",3)
_ArrayDisplay($s)

3mile 发表于 2011-3-14 22:23:52

本帖最后由 3mile 于 2011-3-14 22:41 编辑

#Include <Array.au3>
$s = StringRegExp("一二三123","[\x{4e00}-\x{9fa5}]+",3)
_ArrayDisplay($s)

也可以用这样来表示
#Include <Array.au3>
$s = StringRegExp("一二三123","[一-龥]+",3)
_ArrayDisplay($s)

也可以不使用正则的方式来匹配
#include <array.au3>

Local $str = "阿中A華华b人-民c臺灣共E0和位で表現する文字符号化形式及び文字符号化スキーム。ASCIIに9r国90會館ねちちせのひノセタツヒヌニック"
$abc=_regexp($str,0)
msgbox(0,'单字节',$abc)
$abc=_regexp($str,1)
msgbox(0,'简体中文',$abc)
$abc=_regexp($str,2)
msgbox(0,'非简体双字节字符',$abc)

Func _regexp($input,$flag=1);flag,0='单字节字符',1='简体中文',2='其它双字节字符'
      local $single,$due,$other
      If StringRegExp($input, '[^\x00-\xff]+', 0) Then
                $temp = StringSplit($input, '')
                For $i = 1 To $temp
                        If BinaryLen(StringToBinary($temp[$i])) = 2 Then
                              $high = BinaryMid(StringToBinary($temp[$i]), 1, 1)
                              $low = BinaryMid(StringToBinary($temp[$i]), 2, 1)
                              If $high >= 0xb0 And $high <= 0xf7 And $low >= 0xa1 And $low <= 0xfe Then
                                        $due&=$temp[$i]
                              Else
                                        $other&=$temp[$i]
                              EndIf
                        Elseif BinaryLen(StringToBinary($temp[$i])) =1 Then
                              $single&=$temp[$i]
                        EndIf
                Next
                select
                        case $flag=0
                              return $single
                        case $flag=1
                              return $due
                        case $flag=2
                              return $other
                EndSelect
      EndIf
EndFunc   ;==>_regexp

chenlu_ling 发表于 2011-3-14 23:02:12

围观 学习 {:face (411):}

tryhi 发表于 2011-3-14 23:25:57

回复 2# 3mile

最后面那条_regexp函数让我大开眼界,学习了

3mile 发表于 2011-3-14 23:28:43

回复 4# tryhi
海兄谦虚了

easied 发表于 2011-3-15 08:02:45

很强大,能把unicode的简体部分识别出来,学习了

hollandmfq 发表于 2014-5-4 10:33:15

雷锋精神传天下!谢谢分享!

rogerabc 发表于 2014-7-20 03:51:09

受教了...刚遇到这个问题.

rogerabc 发表于 2014-7-20 03:53:37

多谢..解决了.
页: [1]
查看完整版本: AU3的正则无法使用\u来匹配么?