一些常用的正则表达式(个人收集)

时间:2023-02-18 21:49:37

我特别容易忘记东西,写下来备用 

高手请绕道

1.图片的正则:

<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>

解释:捕获组<imgUrl>的值为图片的src

 

2.A标签正则:

<a\b[^<>]*?\bhref[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<hrURL>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>

解释:捕获组<hrURL>的值为链接的href

 

3.捕获组的语法:

例如有一段html代码:

 

<h2>两只小蜜蜂啊</h2>这里没换行<h2>灰在花丛中啊</h2>这里换行了

<h2>左灰灰,右灰灰....</h2>

<h2>灰啊灰啊....</h2>

 

需要得到每个<h2>标签中的内容

采用这个正则:<h2>*(?<title>.*)</h2>来匹配的话,效果是,获取到了第一行中以第一个<h2>开头,以最后一个</h2>结尾的文本,捕获组title的结果集为:

两只小蜜蜂啊</h2>这里没换行<h2>灰在花丛中啊.

左灰灰,右灰灰....

灰啊灰啊....

从上面可以看出来,没换行的会从第一个开始匹配到最后一个结束,当然换行了就匹配不到了,因为没加换行符.

但是现在我每次只想取得一对<h2>标签中的内容,怎么搞?

这就需要用到正则里的懒惰模式,将上面的正则改成:<h2>*(?<title>.*?)</h2> :此时就没问题了

捕获组title的结果集为:

两只小蜜蜂啊

灰在花丛中啊

左灰灰,右灰灰....

灰啊灰啊....

 

4.URL正则

不知到有没有亲们遇到这种需求:一大段文本,需要你把这一段文本中的URL全部匹配出来,自动加上超链,变成可以点击的链接,反正我是遇到了

这个URL的正则灰常实用而且灰常准,网上很多的URL正则都是扯淡的,要不就是适应性太差,如下:

http(s)?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?

但是使用这个正则的时候有个问题:

就是如果一个url后面紧跟着一串汉字.在工具里面(我用这个工具Regex Match Tracer)测试是没有问题的,但是拿到VS2010里面写代码测试,会把这串汉字也匹配出来,直到出现换行符的地方为止,这也是我百思不得其解的地方,莫非.Net中的正则还有什么不一样吗?....求解答

 

That's over, Thanks for you watching