JobPlus知识库 互联网 其它 文章
正则表达式(Regular Expression)-(3)选择和重复

选择

正则表达式,除了能用字符集进行当个字符的选择,还能通过选择符`|`对表达式进行选择。

例如要在字符串里面匹配两个单词“cat”和“dog”,可以使用表达式:

`cat|dog`

先用正则表达式`cat`匹配,如果匹配不上,再用正则表达式`dog`进行匹配。

优先级

选择符`|`相比于其他正则式符号优先级是比较低的。如,正则表达式:

`\b[Cc]at\b|\b[Dd]og\b`

选择符`|`将正则表达式分成了两个部分,左边为`\b[Cc]at\b`和右边为`\b[Dd]og\b`。先匹配左边正则表达式,然后再匹配右边的正则表达式。当然,也可以将选择符的结果当成子表达式使用。如,上面的表达式可以改成:

`\b([Cc]at|[Dd]og)\b`

`()`可以将选择结果当子表达式使用。上述表达式先匹配`\b`,然后匹配`[Cc]at|[Dd]og`,最后匹配`\b`。

最左匹配

正则表达式从左到右进行匹配,最先匹配到的则被认为是表达式的结果。在匹配字符串“2016”,如果用正则表达式:

`20|2016`

从左到右,先用`20`匹配字符串,返回的结果是“20”而非我们期待的“2016”。对这种情况,我们可以将正则表达式改一下,如下:

`2016|20`

这样可以保证,表达式`2016`先于`20`执行。另外,我们也可以通过选择符号`?`,将正则表达式改成如下:

`20(16)?`

这样也能达到我们的目的。

重复

对于字符串的查找,有时候我们并不确定我们需要查找的字符串的长度。比如,查找字符串里面的数字,数字可能由一个或多个数字字符组成,可能是“1”、“123”或“12345”等待。或者查找一个单词,单词由一个或多个单词字符组成,可能是“a”、“an”或“one”等等。这时候我们就需要用到重复限定符符号了。

表示重复的特殊符号有:

*   表示前面的子表达式出现零次或多次。

+  表示前面的子表达式出现一次或多次。

?  表示前面的子表达式出现零次或多次。

如上面说的,如果需要查找数字字符串,正则表达式为:

`\b[0-9]+\b`

表达式中`+`号表示子表达式`[0-9]`可以重复一次到多次。可以匹配数字字符串“1”、“123”等。当然也可以匹配字符串“01”、“001”等。考虑到正常数字第一位不可能为“0”,可以将正则表达式改成:

`\b[1-9][0-9]*\b`

这样,表达式第1位就不为“0”了。可以匹配字符串“1”、“123”、“23456”等。

`?`也是个常用的重复特殊字符。这个符号常以一种选择的方式出现。例如要匹配单词“cat”或者复数的“cats”,正则表达式为:

`cat(s)?`

重复符号还能对子表达式起作用。例要匹配字符串“LinkedHashMap"和字符串“HashMap”,正则表达式为:

`(Linked)?HashMap`

限定重复

如果我们需要指定字符重复次数,可以用限定重复的特殊符号。如下:

`{n}`       前面表达式或子表达式重复n次。

`{n,} `     前面的表达式或子表达式重复n次或多次。

`{n,m} `   前面的表达式或子表达式重复n次到m次。m必须大于n。

上述重复特殊符号也可以用限定重复次数来表示,其中`*`符号相当于`{0,}`,`+`相当于`{1,}`,`?`相当于`{0,1}`。

匹配数字字符串可以用正则表达式表示如下:

`\b[1-9][0-9]{0,}\b`

如果我们要匹配一个1到4位数的数字字符串,也就是"1"到“9999”的字符串,可以用正则表达式:

`\b[1-9][0-9]{0,3}\b`




如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏支持
51人赞 举报
分享到
用户评价(0)

暂无评价,你也可以发布评价哦:)

扫码APP

扫描使用APP

扫码使用

扫描使用小程序