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: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
围观 学习 {:face (411):} 回复 2# 3mile
最后面那条_regexp函数让我大开眼界,学习了 回复 4# tryhi
海兄谦虚了 很强大,能把unicode的简体部分识别出来,学习了 雷锋精神传天下!谢谢分享! 受教了...刚遇到这个问题. 多谢..解决了.
页:
[1]