正则表达式支持的字符有哪些

51次阅读
没有评论

共计 7701 个字符,预计需要花费 20 分钟才能阅读完成。

这篇文章主要介绍了正则表达式支持的字符有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

一、匹配字符
字符类
匹配的字符
从0-9的任一数字
\d\d:匹配 72, 但不匹配 aa 或 7a
任一非数字字符
\D\D\D:匹配 abc, 但不匹配 123
任一单词字符,包括 A -Z,a-z,0- 9 和下划线
\w\w\w\w:匹配 Ab-2,但不匹配∑?$%* 或 Ab_@
任一非单词字符
\W 匹配@,但不匹配 a
任一空白字符,包括制表符,换行符,回车符,换页符和垂直制表符
匹配在 HTML,XML 和其他标准定义中的所有传统空白字符
任一非空白字符
空白字符以外的任意字符, 如 A% 等
任一字符
匹配除换行符以外的任意字符除非设置了 MultiLine 先项
[…]
括号中的任一字符
[abc]:将匹配一个单字符,a,b 或 c.
[a-z]:将匹配从 a 到 z 的任一字符
[^…]
不在括号中的任一字符
[^abc]:将匹配一个 a、b、c 之外的单字符, 可以 a,b 或 A、B、C
[^a-z]将匹配不属于 a - z 的任一字符, 但可以匹配所有的大写字母
二、重复字符
重复字符
{n}
匹配前面的字符 n 次
x{2}匹配 xx, 但不匹配 x 或 xxx
{n,}
匹配前面的字符至少 n 次
x{2}匹配 2 个或更多的 x, 如 xxx,xxx..
{n,m}
匹配前面的字符至少 n 次, 至多 m 次。如果 n 为 0,此参数为可选参数
x{2,4}匹配 xx,xxx,xxxx, 但不匹配 xxxxx
匹配前面的字符 0 次或 1 次,实质上也是可选的
x? 匹配 x 或零个 x
匹配前面的字符 0 次或多次
x+ 匹配 x 或 xx 或大于 0 的任意多个 x
匹配前面的字符 0 次或更多次
x* 匹配 0,1 或更多个 x
三、定位字符
定位字符
随后的模式必须位于字符串的开始位置,如果是一个多行字符串,则必须位于行首。对于多行文本(包含回车符的一个字符串)来说,需要设置多行标志
前面的模式必须位于字符串的未端,如果是一个多行字符串,必须位于行尾
前面的模式必须位于字符串的开始位置,忽略多行标志
前面的模式必须位于字符串的未端,忽略多行标志
前面的模式必须位于字符串的未端,或者位于一个换行符前
匹配一个单词边界,也就是一个单词字符和非单词字符中间的点。要记住一个单词字符是 [a-zA-Z0-9] 中的一个字符。位于一个单词的词首
匹配一个非单词字符边界位置,不是一个单词的词首

注:定位字符可以应用于字符或组合,放在字符串的左端或右端

四、分组字符
分组字符
此字符可以组合括号内模式所匹配的字符,它是一个捕获组,也就是说模式匹配的字符作为最终设置了 ExplicitCapture 选项――默认状态下字符不是匹配的一部分
输入字符串为:ABC1DEF2XY
匹配 3 个从 A 到 Z 的字符和 1 个数字的正则表达式:([A-Z]{3}\d)
将产生两次匹配:Match 1=ABC1;Match 2=DEF2 每次匹配对应一个组:Match2 的第一个组=ABC;Match3 的第 1 个组=DEF
有了反向引用,就可以通过它在正则表达式中的编号以及 C# 和类 Group,GroupCollection 来访问组。如果设置了 ExplicitCapture 选项,就不能使用组所捕获的内容
(?:)
此字符可以组合括号内模式所匹配的字符,它是一个非捕获组,这意味着模式所的字符将不作为一个组来捕获,但它构成了最终匹配结果的一部分。它基本上与上面的组类型相同,但设定了选项 ExplicitCapture
输入字符串为:1A BB SA1 C
匹配一个数字或一个 A 到 Z 的字母,接着是任意单词字符的正则表达式为:(?:\d|[A-Z]\w)
它将产生 3 次匹配:每 1 次匹配=1A;每 2 次匹配=BB; 每 3 次匹配=SA 但是没有组被捕获
(? name)
此选项组合括号内模式所匹配的字符,并用尖括号中指定的值为组命名。在正则表达式中,可以使用名称进行反向引用,而不必使用编号。即使不设置 ExplicitCapture 选项,它也是一个捕获组。这意味着反向引用可以利用组内匹配的字符,或者通过 Group 类访问
输入字符串为:Characters in Sienfeld included Jerry Seinfeld,Elaine Benes,Cosno Kramer and George Costanza 能够匹配它们的姓名,并在一个组 llastName 中捕获姓的正则表达式为:\b[A-Z][a-z]+(? lastName [A-Z][a-z]+)\b
它产生了 4 次匹配:First Match=Jerry Seinfeld; Second Match=Elaine Benes; Third Match=Cosmo Kramer; Fourth Match=George Costanza
每一次匹配都对应了一个 lastName 组:
第 1 次匹配:lastName group=Seinfeld
第 2 次匹配:lastName group=Benes
第 3 次匹配:lastName group=Kramer
第 4 次匹配:lastName group=Costanza
不管是否设置了选项 ExplictCapture,组都将被捕获
(?=)
正声明。声明的右侧必须是括号中指定的模式。此模式不构成最终匹配的一部分
正则表达式 \S+(?=.NET)要匹配的输入字符串为:The languages were Java,C#.NET,VB.NET,C,Jscript.NET,Pascal
将产生如下匹配:
C#
VB
JScript.
(?!)
负声明。它规定模式不能紧临着声明的右侧。此模式不构成最终匹配的一部分
\d{3}(?![A-Z])要匹配的输入字符串为:123A 456 789111C
将产生如下匹配:
456
789
(? =)
反向正声明。声明的左侧必须为括号内的指定模式。此模式不构成最终匹配的一部分
正则表达式 (? =New)([A-Z][a-z]+) 要匹配的输入字符串为:The following states,New Mexico,West Virginia,Washington, New England
它将产生如下匹配:
Mexico
England
(? !)
反向正声明。声明的左侧必须不能是括号内的指定模式。此模式不构成最终匹配的一部分
正则表达式 (? !1)\d{2}([A-Z]) 要匹配的输入字符串如下:123A456F789C111A
它将实现如下匹配:
56F
89C
(?)
非回溯组。防止 Regex 引擎回溯并且防止实现一次匹配
假设要匹配所有以“ing”结尾的单词。输入字符串如下:He was very trusing
正则表达式为:.*ing
它将实现一次匹配――单词 trusting。“.”匹配任意字符,当然也匹配“ing”。所以,Regex 引擎回溯一位并在第 2 个“t”停止,然后匹配指定的模式“ing”。但是,如果禁用回溯操作:(? .*)ing
它将实现 0 次匹配。“.”能匹配所有的字符,包括“ing”――不能匹配,从而匹配失败
五、决策字符
(?(regex)yes_regex|no_regex)
如果表达式 regex 匹配,那么将试图匹配表达式 yes。否则匹配表达式 no。正则表达式 no 是可先参数。注意,作出决策的模式宽度为 0. 这意味着表达式 yes 或 no 将从与 regex 表达式相同的位置开始匹配
正则表达式 (?(\d)dA|A-Z)B) 要匹配的输入字符串为:1A CB3A5C 3B 它实现的匹配是:1ACB3A
(?(group name or number)yes_regex|no_regex)
如果组中的正则表达式实现了匹配,那么试图匹配 yes 正则表达式。否则,试图匹配正则表达式 no。no 是可先的参数
正则表达式 (\d7)?-(?(1)\d\d[A-Z]|[A-Z][A-Z] 要匹配的输入字符串为:77-77A 69-AA 57-B
它实现的匹配为:
77-77A
-AA

注:上面表中列出的字符强迫处理器执行一次 if-else 决策

六、替换字符
$group
用 group 指定的组号替换
${name}
替换被一个 (? name) 组匹配的最后子串
替换一个字符 $
替换整个的匹配
替换输入字符串匹配之前的所有文本
替换输入字符串匹配之后的所有文本
替换最后捕获的组
替换整个的输入字符串注:以上为常用替换字符,不全
七、转义序列
匹配字符“\”
匹配字符“.”
匹配字符“*”
匹配字符“+”
匹配字符“?”
匹配字符“|”
匹配字符“(”
匹配字符“)”
匹配字符“{”
匹配字符“}”
匹配字符“^”
匹配字符“$”
匹配换行符
匹配回车符
匹配制表符
匹配垂直制表符
匹配换面符
\nnn
匹配一个 8 进数字,nnn 指定的 ASCII 字符。如 \103 匹配大写的 C
\xnn
匹配一个 16 进数字,nn 指定的 ASCII 字符。如 \x43 匹配大写的 C
\unnnn
匹配由 4 位 16 进数字(由 nnnn 表示)指定的 Unicode 字符
\cV
匹配一个控制字符,如 \cV 匹配 Ctrl-V
八、选项标志
选项标志
IgnoreCase
Multiline
ExplicitCapture
SingleLine
IgnorePatternWhitespace

注:选项本身的信作含义如下表所示:

IgnoreCase
使模式匹配不区分大小写。默认的选项是匹配区分大小写
RightToLeft
从右到左搜索输入字符串。默认是从左到右以符合英语等的阅读习惯,但不符合阿拉伯语或希伯来语的阅读习惯
None
不设置标志。这是默认选项
Multiline
指定 ^ 和 $ 可以匹配行首和行尾,以及字符串的开始和结尾。这意味着可以匹配每个用换行符分隔的行。但是,字符“.”仍然不匹配换行符
SingleLine
规定特殊字符“.”匹配任意的字符,包括换行符。默认情况下,特殊字符“.”不匹配换行符。通常与 MultiLine 选项一起使用
ECMAScript.
ECMA(European Coputer Manufacturer’s Association, 欧洲计算机生产商协会)已经定义了正则表达式应该如何实现,而且已经在 ECMAScript 规范中实现,这是一个基于标准的 JavaScript。这个选项只能与 IgnoreCase 和 MultiLine 标志一起使用。与其它任何标志一起使用,ECMAScript 都将产生异常
IgnorePatternWhitespace
此选项从使用的正则表达式模式中删除所有非转义空白字符。它使表达式能跨越多行文本,但必须确保对模式中所有的空白进行转义。如果设置了此选项,还可以使用“#”字符来注释下则表达式
Complied
它把正则表达式编译为更接近机器代码的代码。这样速度快,但不允许对它进行任何修改
九、oracle 的正则表达式(regular expression)

测试数据  

create table test(mc varchar2(60));

insert into test values(112233445566778899

insert into test values(22113344 5566778899

insert into test values(33112244 5566778899

insert into test values(44112233 5566 778899

insert into test values(5511 2233 4466778899

insert into test values(661122334455778899

insert into test values(771122334455668899

insert into test values(881122334455667799

insert into test values(991122334455667788

insert into test values(aabbccddee

insert into test values(bbaaaccddee

insert into test values(ccabbddee

insert into test values(ddaabbccee

insert into test values(eeaabbccdd

insert into test values(ab123

insert into test values(123xy

insert into test values(007ab

insert into test values(abcxy

insert into test values(The final test is is is how to find duplicate words.

commit;

REGEXP_LIKE
语法:REGEXP_LIKE(source_string, pattern[, match_parameter])
说明:返回满足匹配模式的字符串。相当于增强的 like 函数。
Source_string 指定源字符表达式;
pattern 指定规则表达式;
match_parameter 指定默认匹配操作的文本串。
其中 position,occurtence,match_parameter 参数都是可选的
例句:

select * from test where regexp_like(mc, ^a{1,3}

select * from test where regexp_like(mc, a{1,3}

select * from test where regexp_like(mc, ^a.*e$

select * from test where regexp_like(mc, ^[[:lower:]] ?[[:digit:]]

select * from test where regexp_like(mc, ^[[:lower:]]

Select mc FROM test Where REGEXP_LIKE(mc, [^[:digit:]]

Select mc FROM test Where REGEXP_LIKE(mc, ^[^[:digit:]]

REGEXP_INSTR
语法:REGEXP_INSTR(source_string, pattern[, start_position[, occurrence[, return_option[, match_parameter]]]])
说明:该函数查找 pattern,并返回该模式的第一个位置。您可以随意指定您想要开始搜索的 start_position。 
occurrence 参数默认为 1,除非您指定您要查找接下来出现的一个模式。
return_option 的默认值为 0,它返回该模式的起始位置;值为 1 则返回符合匹配条件的下一个字符的起始位置
例句:

Select REGEXP_INSTR(mc, [[:digit:]]$ ) from test;

Select REGEXP_INSTR(mc, [[:digit:]]+$ ) from test;

Select REGEXP_INSTR(The price is $400. , $[[:digit:]]+ ) FROM DUAL;

Select REGEXP_INSTR(onetwothree , [^[[:lower:]]] ) FROM DUAL;

Select REGEXP_INSTR(,,,,, , [^,]* ) FROM DUAL;

Select REGEXP_INSTR(,,,,, , [^,] ) FROM DUAL;

REGEXP_SUBSTR
语法:REGEXP_SUBSTR(source_string, pattern[,position [, occurrence[, match_parameter]]])
说明:返回匹配模式的子字符串。相当于增强的 substr 函数。
Source_string 指定源字符表达式;
pattern 指定规则表达式;
position 指定起始搜索位置;
occurtence 指定替换出现的第 n 个字符串;
match_parameter 指定默认匹配操作的文本串。
其中 position,occurtence,match_parameter 参数都是可选的
match_option 的取值如下:
‘c’  说明在进行匹配时区分大小写(缺省值);
i   说明在进行匹配时不区分大小写;
n   允许使用可以匹配任意字符的操作符;
m   将 x 作为一个包含多行的字符串。
例句:

SELECT REGEXP_SUBSTR(mc, [a-z]+ ) FROM test;

SELECT REGEXP_SUBSTR(mc, [0-9]+ ) FROM test;

SELECT REGEXP_SUBSTR(aababcde , ^a.*b) FROM DUAL;

REGEXP_REPLACE
语法:REGEXP_REPLACE(source_string,pattern,replace_string,position,occurtence,match_parameter)
说明:字符串替换函数。相当于增强的 replace 函数。
Source_string 指定源字符表达式;
pattern 指定规则表达式;
replace_string 指定用于替换的字符串;
position 指定起始搜索位置;
occurtence 指定替换出现的第 n 个字符串;
match_parameter 指定默认匹配操作的文本串。
其中 replace_string,position,occurtence,match_parameter 参数都是可选的。
例句:

Select REGEXP_REPLACE(Joe Smith , (){2,} , , ) AS RX_REPLACE FROM dual;

Select REGEXP_REPLACE(aa bb cc , (.*) (.*) (.*) , 3, 2, 1 ) FROM dual;

特殊字符:
^ 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 n 或 r。
. 匹配除换行符 n 之外的任何单字符。
? 匹配前面的子表达式零次或一次。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。
() 标记一个子表达式的开始和结束位置。
[] 标记一个中括号表达式。
{m,n} 一个精确地出现次数范围,m= 出现次数 =n,{m} 表示出现 m 次,{m,} 表示至少出现 m 次。
? 指明两项之间的一个选择。例子 ^([a-z]+ ?[0-9]+)$ 表示所有小写字母或数字组合成的字符串。
num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
字符簇: 
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何 16 进制的数字,相当于 [0-9a-fA-F]。各种操作符的运算优先级
转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
?“或”操作

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“正则表达式支持的字符有哪些”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计7701字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)