找回密码
 加入
搜索
查看: 5801|回复: 8

[效率算法] AU3的正则无法使用\u来匹配么?

  [复制链接]
发表于 2011-3-14 22:23:51 | 显示全部楼层 |阅读模式
悬赏50金钱已解决
本帖最后由 tryhi 于 2011-3-14 23:26 编辑

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

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

最佳答案

查看完整内容

[au3]#Include $s = StringRegExp("一二三123","[\x{4e00}-\x{9fa5}]+",3) _ArrayDisplay($s)[/au3] 也可以用这样来表示 [au3]#Include $s = StringRegExp("一二三123","[一-龥]+",3) _ArrayDisplay($s)[/au3] 也可以不使用正则的方式来匹配 [au3]#include Local $str = "阿中A華华b人-民c臺灣共E0和位で表現する文字符号化形式及び文字符号化スキーム。ASCIIに9r国90會館ねちちせのひノセタツヒヌニック" $abc=_regexp($st ...
发表于 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[0]
                        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

评分

参与人数 1金钱 +50 贡献 +15 收起 理由
tryhi + 50 + 15 佩服佩服

查看全部评分

发表于 2011-3-14 23:02:12 | 显示全部楼层
围观 学习
 楼主| 发表于 2011-3-14 23:25:57 | 显示全部楼层
回复 2# 3mile

最后面那条_regexp函数让我大开眼界,学习了
发表于 2011-3-14 23:28:43 | 显示全部楼层
回复 4# tryhi
海兄谦虚了
发表于 2011-3-15 08:02:45 | 显示全部楼层
很强大,能把unicode的简体部分识别出来,学习了
发表于 2014-5-4 10:33:15 | 显示全部楼层
雷锋精神传天下!谢谢分享!
发表于 2014-7-20 03:51:09 | 显示全部楼层
受教了...刚遇到这个问题.
发表于 2014-7-20 03:53:37 | 显示全部楼层
多谢..解决了.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-29 09:35 , Processed in 0.082257 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表