较全的正则字符、规则汇总
匹配模式指得是正则表达式引擎将以何种模式匹配字符串。
模式名称
启用,禁用
缺省启用
说明
UNIX_LINES
(?d)启用,(?-d)禁用
是
启用Unix行模式。
在此模式下,只有 '\n'
CASE_INSENSITIVE
(?i)启用,(?-i)禁用
否
启用忽略大小写模式。
缺省时,忽略大小写模式只会影响 ASCII字符的匹配。 而Unicode范围的忽略大小写匹配需要通过 UNICODE_CASE 标志与本标志联合使用。
启用此模式会影响匹配性能。
COMMENTS
(?x)启用,(?-x)禁用
否
允许空格和注释出现在正则表达式中。
在此模式下,空格被忽略,以#开始的单行注释被忽略。
MULTILINE
(?m)启用,(?-m)禁用
是
启用多行模式。
In multiline mode the expressions ^
DOTALL
(?s)启用,(?-s)禁用
否
让.可以匹配行结束符。
在此模式下,元字符.
UNICODE_CASE
(?u)启用,(?-u)禁用
否
Enables Unicode-aware case folding.
When this flag is specified then case-insensitive matching, when enabled by the CASE_INSENSITIVE
CANON_EQ
(?c)启用,(?-c)禁用
否
Enables canonical equivalence.
When this flag is specified then two characters will be considered to match if, and only if, their full canonical decompositions match. The expression "a\?"
启用此模式会影响性能。
字符子集 字符子集可以含有别的字符子集,并且可以通过联合操作符(缺省)和交集操作符(&&)实现组合。联合操作符表示某个子集匹配它的子子集所匹配的任意字符。交集操作符表明某个字符子集只匹配它的子子集都匹配的字符。
字符子集所能够有的操作符的优先级如下,从高到低:
- 转义符\x
- 成组符 [...]
- 区间符 a-z
- 联合符 [a-e][i-u]
- 交集符 [a-z&&[aeiou]]
行结束符 行结束符是一个或两个字符序列,用以表明输入字符序列中一行的结束。下面的字符被认为是行结束符:
如果 MULTILINE 模式被启用,。
分组和引用 字符分组以它们的左括号的出现顺序来排序。例如在表达式((A)(B(C))),有四个分组:
- ((A)(B(C)))
- (A)
- (B(C))
- (C)
分组采用这样的命名方式,是因为,在一次匹配过程中,正则表达式会被匹配多次。以前的匹配子序列有可能在将来被使用;或者在匹配结束时,程序有可能需要重新获得所有匹配的子字符序列。
对于正则表达式中的某个分组而言,永远只保留最后匹配的字符序列。如果对某个分组匹配尝试失败,则会保留上次匹配成功的字符序列。例如,对于正则表达式(a(b)?)+而言,字符序列"aba",将会让分组2匹配的字符序列为"b"。
以(?开始的分组,将不会计入分组数目,也不会被后续匹配所引用。
Unicode支持 本正则表达式匹配引擎的实现遵循了《Unicode技术报告:Unicode正则表达式指南
Unicode块(Block)和分类(Category)通过\p和\P通配苻表示。\p{
目前支持的Unicode块和分类是《Unicode标准,第三版
与Perl 5正则表达式语法对比 [TBD]
正则表达式参考
字符正则表达式字符串
匹配的字符串
X
字符X,包括 CJK ExtB 区汉字
\\
反斜杠\
\0
\0
八进制0
\0
八进制0
\x
十六进制 0x
\u
十六进制 0x
\t
制表符('\ ')
\n
换行('\ ')
\r
回车('\ ')
\a
响铃符('\ ')
\e
取消符Escape('\001B')
\c
逻辑操作符正则表达式字符串
匹配的字符串
(
向后引用正则表达式字符串
匹配的字符串
\
第
边界元字符边界字符
匹配的字符串
^
行首
$
行末
\b 字符边界
\B
非字符边界
\A
输入流的开始
\G
上次匹配的结束处
\Z
输入流的结束,或者是最后一个行结束符,参见[url=file:///D:/source/jtextpro/src/dist/jtextpro/docs/regexp.html#man_line_terminator]行结束符
\z
输入流的结束
重复指示符正则表达式字符串
匹配的字符串
注:
字符子集正则表达式字符串子集
匹配的字符串
组合方式
[abc]
字符a,b或c,包括 CJK ExtB 区汉字
简单子集
[^abc]
任意非a,b或c的字符。
排除
[a-zA-Z] 从a到z,或者A到Z,包含a,z,A,Z。
区间
[a-d[m-p]]
从a到d,或者m到p,等于[a-dm-p]。
联合
[a-z&&[def]]
d,e或者f。
交集
[a-z&&[^bc]]
从a到z,除了b和c,等于[ad-z]
扣除
[a-z&&[^m-p]]
从a到z,并且不包括从m到p,等于[a-lq-z]
扣除
预定义子集(元字符)边界字符
匹配的字符串
.
任意字符,可能匹配行结束符。
\d
数字[0-9]
\D 非数字[^0-9]
\s
空白符[ \t\n\x0B\f\r]
\S
非空白符[^\s]
\w
单词符,包含有字母和数字[a-zA-Z_0-9]
\W
非单词符,不包含有字母和数字。
扩展子集(元字符)正则表达式字符串
匹配的字符串
扩展中文子集(元字符)名称
块名称(\p{InXXX})
简化通配符
标准Unicode块,或者汉字列表
任意双字节字符(汉字或全角符号)
\p{InQuqnJiao}
\E
任意由GBK表示的汉字,不包括GB18030扩展部分,
以及CJK ExtB区的汉字。
任意单字节字符
\p{InFQ nJiao}
\~E
任意单字节字符。
任意全角ASCII字符
\p{InQJAscii}
\H
标准HalfwidthandFullwidthForms块
任意收录在BIG5码集中的双字节字符
\p{InBig5}
\I
Big5可编码双字节字符
匹配未收录在BIG5码集中的双字节字符\p{InFBig5}
\~I
非Big5可编码双字节字符
匹配任意汉字(不包括符号)
\p{InHanziOrCJKExtB}
\X
任意汉字,包括GB18030扩展部分。
匹配任意汉字(不包括符号)
\p{InHanzi}
\M
任意汉字,不包括GB18030扩展部分。
匹配非汉字的双字节字符
\p{InFHanzi}
\~M
任意非汉字的双字节字符,
包括GB18030扩展部分。
地支字符
\p{InDiZhi}
\U
子丑寅卯辰巳午未申酉戌亥
匹配收录在GB码集中的双字节字符
\p{InGB}
\g
收录在GB码集中的双字节字符,
不包括GB18030扩展部分。
匹配非收录在GB码集中的双字节字符
\p{InFGB}
\~g
未收录在GB码集中的双字节字符,
不包括GB18030扩展部分。
匹配收录在GBK码集中的双字节字符
\p{InGBK}
\h
收录在GBK码集中的双字节字符,
不包括GB18030扩展部分。
匹配非收录在GBK码集中的双字节字符
\p{InFGBK}
\~h
未收录在GBK码集中的双字节字符,
不包括GB18030扩展部分。
大写希腊字母
\p{InDaXila}
\K
ΑΒΓΔΕΖΗΘΙΚΛΜΝ
ΞΟΠΡΣΤΥΦΧΨΩ
日文片假名
\p{InPianJia}
\j
标准Katakana块
日文平假名
\p{InPingJia}
\J
标准Hiragana块
小写希腊字母
\p{InXiaoXila}
\k
αβγδεζηθικλμν
ξοπρστυφχψω
数学符号
\p{InMathe}
\m
±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙
∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴
中文数字
\p{InCnDigit}
\i
〇一二三四五六七八九十百千万亿兆吉京
大写中文数字
\p{InDaCnDigit}
\N
零壹贰叁肆伍陆柒捌玖拾佰仟萬亿兆吉京
全角标点符号
\p{InQJBiaoDian}
\o
、。·ˉˇ¨〃々—~‖…‘’“”〔〕
〈〉《》「」『』〖〗【】!"'(),
-.:;<=>?[]{|}`﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚
﹛﹜﹝﹞︵︶︹︺︿﹀︽︾﹁﹂﹃﹄
︻︼︷︸︱︳︴
小写俄文字母
\p{InXiaoEWen}
\l
абвгдеёжзийклмн
опрстуфхцчшщъыьэюя
大写俄文字母
\p{InDaEWen}
\R
АБВГДЕЁЖЗИЙКЛМНО
ПРСТУФХЦЧШЩЪЫЬЭЮЯ
中文序号
\p{InCnSN}
\q
ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ
ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ
再加上Unicode标准EnclosedAlphanumerics块
天干字符
\p{InTianGan}
\T
甲乙丙丁戊己庚辛壬癸
竖排标点符号
\p{InSPBiaoDian}
\V
︵︶︹︺︿﹀︽︾﹁﹂﹃﹄︻︼︷︸︱︳︴
拼音字符
\p{InPinyin}
\y
āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑńňɡ
GBK -> 0xA8A1- 0xA8C0
只是Unicode标准LatinExtended-A块的一部分。
注音字符
\p{InZhuyin}
\Y
标准Bopomofo块
制表字符
\p{InZhiBiao}
\C
标准BoxDrawing块。
经检查发现 textpro 的算法含有部分非标
准Unicode制表符:“∟∣≒≦≧⊿═”。
POSIX字符子集(只适用于ASCII)正则表达式字符串
匹配的字符串
\p{Lower}
小写字母[a-z]
\p{Upper}
大写字母[A-Z]
\p{ASCII}
所有的ASCII字符[\x00-\x7F]
\p{Alpha}
大小写字母[\p{Lower}\p{Upper}]
\p{Digit}
数字[0-9]
\p{Alnum}
字母数字符,包含大小写字母和数字[\p{Alpha}\p{Digit}]
\p{Punct}
标点符号,!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~之一。
\p{Graph}
可显示字符[\p{Alnum}\p{Punct}]
\p{Print}
可打印字符[\p{Graph}]
\p{Blank}
空格或者制表符[ \t]
\p{Cntrl}
控制字符[\x00-\x1F\x7F
\p{XDigit}
十六进制数字[0-9a-fA-F]
\p{Space}
空白符[ \t\n\x0B\f\r]
Unicode块和分类块
中文名称(摘自Word XP)
代码区域
BasicLatin
基本拉丁语
\ -\
Latin-1Supplement
拉丁语-1
\?-\?
LatinExtended-A
拉丁语扩充-A
\?-\?
LatinExtended-Bound
拉丁语扩充-B
\?-\?
IPAExtensions
国际音标扩充
\?-\?
SpacingModifierLetters
进格的修饰字符
\?-\?
CombiningDiacriticalMarks
组合用发音符
\?-\?
Greek
基本希腊语
\?-\?
Cyrillic
西里尔语
\?-\?
Armenian
\?-\?
Hebrew
\?-\?
Arabic
\?-\?
Syriac
\?-\?
Thaana
\?-\?
Devanagari
\?-\?
Bengali
\?-\?
Gurmukhi
\?-\?
Gujarati
\?-\?
Oriya
\?-\?
Tamil
\?-\?
Telugu
\?-\?
Kannada
\?-\?
Malayalam
\?-\?
Sinhala
\?-\?
Thai
\?-\?
Lao
\?-\?
Tibetan
藏语
\?-\?
Myanmar
\?-\?
Georgian
\?-\?
HangulJamo
\?-\?
Ethiopic
\?-\?
Cherokee
\?-\?
UnifiedCanadianAboriginalSyllabics
\?-\?
Ogham
\?-\?
Runic
\?-\?
Khmer
\?-\?
Mongolian
蒙古语
\?-\?
LatinExtendedAdditional
\?-\?
GreekExtended
\?-\?
GeneralPunct tion
广义标点
\?-\?
SuperscriptsandS scripts
\?-\?
CurrencySymbols
货币符号
\?-\?
CombiningMarksforSymbols
\?-\?
LetterlikeSymbols
类似字母的符号
\?-\?
NumberForms
数字形式
\?-\?
Arrows
箭头
\←-\?
MathematicalOperators
数学运算符
\?-\?
MiscellaneousTechnical
零杂技术用符号
\?-\?
ControlPictures
\?-\?
OpticalCharacterRecognition
\?-\?
EnclosedAlphanumerics
带括号的字母数字
\①-\?
BoxDrawing
制表符
\─-\?
BlockElements
方块图形
\?-\?
GeometricShapes
几何图形
\■-\?
MiscellaneousSymbols
零杂丁贝符(示意符等)
\?-\?
Dingbats
\?-\?
BraillePatterns
\?-\?
CJKRadicalsSupplement
\?-\?
KangxiRadicals
\?-\?
IdeographicDescriptionCharacters
\?-\?
CJKSymbolsandPunct tion
CJK符号和标点
\ -\?
Hiragana
平假名
\?-\?“形式
Katakana
片假名
\?-\?
Bopomofo
注音
\?-\?
HangulCompatibilityJamo
\?-\?
Kanbun
\?-\?
BopomofoExtended
扩展注音
\?-\?
EnclosedCJKLettersandMonths
带括号的CJK字母及月份
\?-\?
CJKCompatibility
CJK兼容字符
\?-\?
CJKUnifiedIdeographsExtensionA
CJK统一汉字扩展-A
\?-\?
CJKUnifiedIdeographs
CJK统一汉字
\一-\?
YiSyllables
\ 000-\ 48F
YiRadicals
\ 490-\ 4CF
HangulSyllables
\ C00-\?
HighSurrogates
\?-\?
HighPrivateUseSurrogates
\?-\?
LowSurrogates
\?-\?F
PrivateUse
专用区
\ 000-\?
CJKCompatibilityIdeographs
CJK兼容汉字
\?-\?
AlphabeticPresentationForms
\?-\?
ArabicPresentationForms-A
\?-\?
CombiningHalfMarks
\?-\?
CJKCompatibilityForms
CJK兼容形式
\︰-\﹏
SmallFormVariants
小写变体
\﹐-\?
ArabicPresentationForms-Bound
\?-\?
Specials
\?-\?
HalfwidthandFullwidthForms
半形及全形字符
\?-\?
分类
全称
说明
Cn
UNASSIGNED
Lu
UPPERCASE_LETTER
Ll
LOWERCASE_LETTER
Lt
TITLECASE_LETTER
Lm
MODIFIER_LETTER
Lo
OTHER_LETTER
Mn
NON_SPACING_MARK
Me
ENCLOSING_MARK
Mc
COMBINING_SPACING_MARK
Nd
DECIMAL_DIGIT_NUMBER
Nl
LETTER_NUMBER
No
OTHER_NUMBER
Zs
SPACE_SEPARATOR
Zl
LINE_SEPARATOR
Zp
PARAGRAPH_SEPARATOR
Cc
CNTRL
Cf
FORMAT
Co
PRIVATE_USE
Cs
SURROGATE
Pd
DASH_PUNCT TION
Ps
START_PUNCT TION
Pe
END_PUNCT TION
Pc
CONNECTOR_PUNCT TION
Po
OTHER_PUNCT TION
Sm
MATH_SYMBOL
Sc
CURRENCY_SYMBOL
Sk
MODIFIER_SYMBOL
So
OTHER_SYMBOL
L
LETTER
M
MARK
N
NUMBER
Z
SEPARATOR
C
CONTROL
P
PUNCT TION
S
SYMBOLLD
LETTER_OR_DIGIT
L1
Latin-1
all
ALL
ASCII
ASCII
Alnum
字母数字(0-9,a-z,A-Z)
Alpha
字母(a-z,A-Z)
Blank
空格和制表符(' '|\t)
Cntrl
控制字符,不可打印
Digit
数字(0-9)
Graph
可打印且可视字母(例如空格' '是可打印的但不是可视字母,而 `a' 两者都是。)
Lower
小写字母
可打印字母(非控制字符)
Punct
标符号(字母、数字、控制、空白符以外的字母),如:!@#$%}{<>,./?[]等等。
Space
空白符(' ',\t,0x09,0x0A,0x0B,0x0C,0x0D,0x20)
Upper
大写字母
XDigit
十六进制数字(0-9,a-f, A-F)
替换表达式特殊字符
特殊字符介绍
描述
\n
换行
\b
向前删除一个字符。当这个字符位于替换串之首时,将删除匹配串之前的一个字符。若匹配串位于行首,将使匹配串所在行与前一行相合并。
\d
向后删除一个字符。当这个字符位于替换串之末时,将删除匹配串之后的一个字符。若匹配串位于行末,将使匹配串所在行与下一行相合并。
\e
插入一个ESC字符
\t
插入一个TAB字符
\
n代表查找正则表达式中的子表达式(组)。\1代表第一个子表达式,\2代表第二个子表达式,依次类推。\0代表整个匹配到的字符串。
\v
大写下一个字母
\U
全部大写以后的字母,直到碰到其它指示符为止。
\l
小写下一个字母
\L
全部小写以后的字母,直到碰到其它指示符为止。
\E
取消所有的字母大小写指示符。
自定义替换表
在查找/替换中使用自定义替换表
有的时候,上述简单的自定义替换功能是不够的。例如,用户可能希望只把出现在括号内的源串替换为目标串。这种文本处理可以通过在查找/替换中使用自定义替换表来解决。
在查找/替换功能中使用自定义替换表的替换函数是\Tn,其中n是0-9的数字, 注意n为0表示第10张替换表。如果略去n,其效果相当于\T1,即使用第一张替换表。例如要把所有放在方括号中的汉字替换为拼音,可以查找“\[(\E)\]”,替换为“\T{\1}”。即把第一个子表达式的匹配内容按自定义替换表转换。注意,如果\T函数的参数不在替换表的源串中,\T函数的结果与源串相同,即不做任何变换。
有些情况下,用户可能希望只使用替换表的一部分内容。还是以拼音为例,前面给出的替换表中包含了拼音的音调,如果在替换时不希望加上这些音调数字,可以使用“过滤”功能。所谓过滤,其实是用一个正则表达式去分析替换表的目标串,并把其中的某个子表达式取出来。
使用“过滤”时,在“设置自定义替换表”对话框中,点“过滤”按钮,在弹出的对话框中填入一个正则表达式。再以拼音为例,表达式可以写为“(\p{Alpha}+)(\d)”,其中第一对括号中的是不含音调的拼音,第二对括号是音调。在调用\T函数时,JTextPro会在目标串中查找这个正则表达式。但是如何把其中的子表达式取出来呢?\T函数还有一个可选的下标,取第n个子表达式的值就写作\T{...}[n]。所以,把放在方括号中的汉字替换为不带调的拼音,可以查找“\[(\E)\]”,替换为“\T{\1}[1]”
匹配汉字:
Regex r= new Regex(@"[\一-\龥]+");
MatchCollection m=r.Match(yourstring);
-------------------------
如果需要使用正则表达式匹配Unicode字符的话...
这里是几个主要非英文语系字符范围(google上找到的):
2E80~33FFh:中日韩符号区。收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符,中日韩的符号、标点、带圈或带括符文数字、月份,以及日本的假名组合、单位、年号、月份、日期、时间等。
3400~4DFFh:中日韩认同表意文字扩充A区,总计收容6,582个中日韩汉字。
4E00~9FFFh:中日韩认同表意文字区,总计收容20,902个中日韩汉字。
A000~A4FFh:彝族文字区,收容中国南方彝族文字和字根。
AC00~D7FFh:韩文拼音组合字区,收容以韩文音符拼成的文字。
F900~FAFFh:中日韩兼容表意文字区,总计收容302个中日韩汉字。
FB00~FFFDh:文字表现形式区,收容组合拉丁文字、希伯来文、阿拉伯文、中日韩直式标点、小符号、半角符号、全角符号等。
比如需要匹配所有中日韩非符号字符,那么正则表达式应该是^[\?-\?]+$
理论上没错, 可是我到msn.co.ko随便复制了个韩文下来, 发现根本不对, 诡异
再到msn.co.jp复制了个'お', 也不得行..
然后把范围扩大到^[\?-\?]+$, 这样倒是都通过了, 这个应该就是匹配中日韩文字的正则表达式了, 包括我們臺灣省還在盲目使用的繁體中文
而关于中文的正则表达式, 应该是^[\一-\?]+$, 和论坛里常被人提起的^[\一-\龥]+$很接近
需要注意的是论坛里说的^[\一-\龥]+$这是专门用于匹配简体中文的正则表达式, 实际上繁体字也在里面, 我用测试器测试了下'中華人民共和國', 也通过了, 当然, ^[\一-\?]+$也是一样的结果