通过一个小例子学习正则表达式

通过几个小例子,来说明一下如何理解正则表达式。

例1、比如有下面的需求:

1、Number can start with +- or . symbol.

Example:

✔+4.50

✔-1.0

✔.5

✔-.7

✔+.4

✖ -+4.5

 2、Number must contain at least  decimal value.

For example:

✖ 12.

✔12.0  

 3、Number must have exactly one . symbol.

以上需求(实际上就是判断一个字符串是不是Float类型)的正则表达式为:

^[-+]?[0-9]*\.[0-9]+$

解释:

^  表示匹配字符串的开始位置

[  ] 中括号表示匹配括号中一个字符 范围描述 如[0-9 a-z A-Z]。

?  表示匹配零次或一次

到这为止,^[-+]?表示字符串要以一个加号或减号为开头,或者没有加减号也可以。

这里?的作用,是可以没有[+-],如果有只能有一个[+-]。

接着往下,[0-9]*

*  表示匹配 零次到多次

也就是说只能是0-9的数字,可以是0个,1个或多个

接下来的\.

由于 .  在正则表达式中有特殊含义(.  表示匹配单个字符),

所以,如果想精确匹配 .  的话,点前面需要加上转义字符\

最后的[0-9]+$

+  表示匹配 一次到多次 (至少有一次)

$  表示匹配字符串的结束位置

也就是说,小数点后面必须至少有一个数字,也可以是多个数字,并且以这些数字结束($的作用)。

例2、匹配字符串中重复的数字或者字母(重复的可以是2个以上的字符),

如下面字符串中的红色字符,是我们要抽出的结果。

..1234567891011121314SSome__Randd1718202122223

正则表达式为:([a-zA-Z0-9])\1+

解释:

(  ) 小括号表示匹配括号中全部字符,并且把匹配的字符生成数组

\1 表示2个重复的字符,+ 表示可以是多个重复的字符

注意,为什么不能用\w呢? 因为\w通常表示英文字母或数字或下划线"_"

如果用\w,就会把示例中的"__"也给匹配出来。

但是你是可以把上面的0-9换成\d的。(\d  表示数字   \D  非数字)

例3,再找一个{}使用的例子,比如取得指定字符串中连续两个以上元音字母。

rabcdeefgyYhFjkIoomnpOeorteeeeet

结果应该为:

ee
Ioo
Oeo
eeeee

正则表达式:([aeiouAEIOU]{2,})

{  } 大括号用于限定匹配次数  如 {n}表示匹配n个字符  {n,}表示至少匹配n个字符  {n,m}表示至少n,最多m

更多的正则表达式的用法和用例,可以参考:

https://www.cnblogs.com/mzmy/p/11201377.html

https://www.jianshu.com/p/9c4979a3b7e4  ->介绍了?: ?= ?! ?<= ?<!的用法

发布了90 篇原创文章 · 获赞 3 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/sunnyboychina/article/details/104060980
今日推荐