guland 发表于 2010-9-9 11:32:43

[已解决] 求一正则,匹配字符串中是否只有中文

本帖最后由 guland 于 2010-9-9 14:54 编辑

{:face (198):}如题,匹配字符串中是否只有中文,或者其中一个字符是否为中文,都可以

afan 发表于 2010-9-9 12:53:20

$a = 'abc含 123'
If StringRegExp($a, '[^\x00-\xff]') Then MsgBox(0, $a, '含有汉字或双字节字符')
$b = '全都是 双字节字符'
If StringRegExp($b, '^[^\x00-\xff]+$') Then MsgBox(0, $b, '全都是双字节字符')

Duvet 发表于 2010-9-9 14:12:31

本帖最后由 Duvet 于 2010-9-9 14:30 编辑

試看看可不可以
※註:請以Unicode格式來儲存au3

;漢字範圍 \u4E00-\u9fa5
;在這改為 \u4E00-\u9fff

Local $str="English,简体,繁體,にほんご,"&BinaryToString("0xD55CAD6DC758",3)
MsgBox(0,"全部的文字",$str)

$str=StringToBinary($str,3)
$str=StringTrimLeft($str,2)
$str=StringRegExpReplace($str,"(.{4})","z$1")
$str=StringRegExp($str,"(?:z..|z...)+",3)
If @Error Then Exit;Msgbox(32,"提醒","字串中不含中文")

Local $i=0,$newstr=""
For $i=0 To UBound($str)-1
      $newstr&= BinaryToString("0x"&StringReplace($str[$i],"z",""),3)&@CRLF
Next

MsgBox(0,"中文的部份",$newstr)
Exit

Duvet 发表于 2010-11-6 23:52:52

本帖最后由 Duvet 于 2010-11-7 00:02 编辑

雖然這題列為[已解决],但請容許我更新一下方法,方便後人的使用


#include <Array.au3>
Local $str="English,简体,繁體,にほんご,"&BinaryToString("0xD55CAD6DC758",3)
MsgBox(0,"全部的文字",$str)

If StringRegExp($str, "^[\x{4e00}-\x{9fff}]+$", 0) Then
        Msgbox(32, "結果", "字串中只含中文。", 10)
Else
        Msgbox(32, "結果", "字串中含非中文。", 10)
EndIf

Local $result = StringRegExp($str, "[\x{4e00}-\x{9fff}]+", 3)
_ArrayDisplay($result, "含中文字串共有 " & UBound($result) & " 筆符合")
Exit

coping 发表于 2011-2-7 00:09:19

学习了,感谢

asdasdasd 发表于 2011-8-20 14:29:35

多谢,再次学习

ncxj 发表于 2015-12-16 18:22:50

非常好,谢谢,论坛终于能访问了

chamlien 发表于 2016-1-4 14:21:30

学习了,这个可以区别日本,赞!
页: [1]
查看完整版本: [已解决] 求一正则,匹配字符串中是否只有中文