正则表达式

一、正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
1.正则表达式有12个字符被保留做特殊用途:[ ] 、\、 ^ 、$、 .、 | 、? 、* 、+ 、( )、{ }
在正则表达式中将这些字符用作文本字符,需要加反斜杠""。即反斜杠改变了字符原本的含义,使其变为普通字符。
(1)字符集[ ],表示选择
[ ] 字符集:[]中写多个字符,表示字符的集合,取值时只取其中的一个字符,不用用逗号隔开。对于特殊的字符范围比如字母或数字,可以使用“-”简单表示。
例: [Bbw]表示只能是B,b或w;
[ a-zA-Z0-9 ] 表示一个字母或数字。
补充,上面的正则表达式也可写成 [ a-z[ A-Z ] [ 0 -9 ] ]
另外:也可以表示交集:
在这里插入图片描述
[ ^ ]排斥字符集,即除了字符集中的任何一个字符。
例:[ ^ 0-9 ] 非数字(相当于\D)
[ ^ "#> ] 表示非"且非#且 非>。

(2)\表示 转义字符(注意:转义字符都只表示一个字符)
\t 制表符
\n 换行符
\x20 匹配ASCII代码中十六进制代码为nn的字符
**\s 一个空格字符
\S 一个非空格
\d 一个数字,相当于[ 0-9 ]
\D 非数字,相当于[ ^0-9 ]
\w 一个英文字符或数字或下划线,相当于[a-zA-Z_0-9]
\W 相当于[ ^\w ]
\b 单词的边界
.(一个点)表示匹配任意一个字符
**
例: \bH 表示单词以H开头
@“(\w+)\1(\1)” 里的(\1)表示与(\w+)的内容相同(不仅仅是模式相同)

(2)数量词
{n} 重复n次
A{3} 表示AAA, [0-9] {3} 表示三个连续数字
{n,m} 最少重复n次,最多重复m次
*零次或任意次 相当于{0,}
+一次或任意次 相当于{1,}
? 零次或一次 相当于{0,1}

(3)位置
^ 从首字符开始匹配
例: ^A 表示以A开头的字符串
$ 字符串结尾
例:^X[0-9]+$ 表示X开头接着一到多个数字的字符串

(4)分组
() 子表达式进行分组
(good|bad)boy 匹配“goodboy”或者“badboy”
|表示“或”,常在分组内使用
(?<名称>xxxxxxxx) 表示对分组进行命名(后面详解)
若不命名,则使用序号1, 2表示

二、Java中使用正则表达式
Java中字符串(String)变量可以使用方法matches(String regex),参数就是正则表达式。Java中的正则表达式也是以字符串的形式表示的。
例如:
在这里插入图片描述
注意:在Java中,反斜杠\有特殊含义,所以当使用转义字符时需要写两个反斜杠,简单来说就是两个反斜杠表示一个反斜杠。
例如,表示一个数字的正则表达式为"\d"。
在这里插入图片描述

三、、c#提供了用于正则表达式匹配的类Regex,需要在含有正则表达式的字符串前加@。
(1)静态方法
Regex.IsMatch( s, pattern ) //返回布尔值
在这里插入图片描述
(2)非静态方法
创建对象Regex regex=new Regex(pattern);
regex.IsMatch(s) //返回布尔值
regex.Match(s) //返回第一个匹配(Match对象,Match类后面讲解)
regex.Matches(s) //返回所有匹配(MatchCollection对象)
regex.Replace(s, r) //将匹配子串替换为另一个字符串
在这里插入图片描述
三、分组
C#命名空间System.Text.RegularExpressions提供了支持正则表达式操作的类。这些类主要包括Regex,MatchCollection,Match,GroupCollection,Group,CaputerCollection和Caputer,下图表示了这些类之间的关系。
在这里插入图片描述
正则表达式很重要的一个应用就是在文本中提取字符串,这一功能的实现主要是靠Match类和Group类,因此理解匹配和组的概念很重要。要实现在一段文本中查找URL功能,这个例子比较简单,只要调用Regex.Matches()方法就可以找到URL的集合。示例代码如下:
在这里插入图片描述
现在,要求变了,不仅要找出URL,还要找出每个URL的协议和域名地址,这时就要用到正则表达式的分组功能了。分组是要匹配的模式pattern用小括号括起来,分成不同的组,如可以把上面例子中的模式改为:string pattern = @“\b(?\S+)😕/(?

\S+)\b”; 这样就用括号分成了两个组(实际上是三个组,因为匹配本身可以看做一个大组),"?“和”?
"定义了每个组的别名protocol和address,这不是必须的,只是方便我们获取需要的组。示例代码如下:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值