通過幾個小例子,來說明一下如何理解正則表達式。
例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 ->介紹了?: ?= ?! ?<= ?<!的用法