正则表达式是字符串处理利器.简单的正则就是一些字符或数字.
包含一个最简单正则表达式的表达式是用==~.
比如说:
在这里有两件需要注意的事情,第一是
==~它和==操作符很像,但正则匹配模式已经代替了精确比较.
第二个是/,把表达式包含在/ 里面就是告诉groovy,把它当成正则
处理,而不是字符串.
我们可以在beijing后面加上?,表达字符g是可选的.
现在我们定义一个方法,来检验指定字符串是否符合我们给定的
正则:
输出结果是:
假定有字符串"lovebeijing" ,如果我们想让"beijing"变成可选的,比如换成"nanjing",这时
可以用(beijing | nanjing),注意|两边不能有空格:
上面两个表达式都是符合要求的.
(a | b) 只能出现其中和一个,且一次.
我们再来看看其它一些例子:
正则表达式符号的说明:
有件事情你是必须知道的,假如你想匹配一个上面有特殊意思的符号,比如?,
你必须在?前面加'/'进行转义.
我们来看看这个例子:
经常出现的.
遇到这种情况,我们可以把规则拆开开看:
/ 正则开始
[^/?] 不能是?号
+ 出现一次或多次
/? 匹配?
/ 正则结束
这样的话,这个正则就很清楚了.
输出为: true.
包含一个最简单正则表达式的表达式是用==~.
比如说:
"
beijing
"
==~
/
beijing
/
运行一下结果是true.
在这里有两件需要注意的事情,第一是
==~它和==操作符很像,但正则匹配模式已经代替了精确比较.
第二个是/,把表达式包含在/ 里面就是告诉groovy,把它当成正则
处理,而不是字符串.
我们可以在beijing后面加上?,表达字符g是可选的.
"
beijing
"
==~
/
beijing
/
" beijin " ==~/ beijing ?/
结果都为true.
" beijin " ==~/ beijing ?/
现在我们定义一个方法,来检验指定字符串是否符合我们给定的
正则:
def check(a,b)
{
if(a ==~ b)
{
println("spell ok")
}
else
{
println("error,try again")
}
}
鉴于刚才上面提到的基础知识,我们输入如下内容进行测试:
{
if(a ==~ b)
{
println("spell ok")
}
else
{
println("error,try again")
}
}
regular
=
/
zdw
/
check( " zdw " , regular)
check( " test " , regular)
theRegularExpression = / Wisniew ? ski /
check( " Wisniewski " , theRegularExpression)
check( " Wisnieski " , theRegularExpression)
check( " Wisniewewski " , theRegularExpression)
check( " zdw " , regular)
check( " test " , regular)
theRegularExpression = / Wisniew ? ski /
check( " Wisniewski " , theRegularExpression)
check( " Wisnieski " , theRegularExpression)
check( " Wisniewewski " , theRegularExpression)
输出结果是:
spell ok
error, try again
spell ok
spell ok
error, try again
error, try again
spell ok
spell ok
error, try again
假定有字符串"lovebeijing" ,如果我们想让"beijing"变成可选的,比如换成"nanjing",这时
可以用(beijing | nanjing),注意|两边不能有空格:
regular
=
/
love(beijing
|
nanjing)
/
check( " lovebeijing " ,regular)
check( " lovenanjing " ,regular)
check( " lovebeijing " ,regular)
check( " lovenanjing " ,regular)
上面两个表达式都是符合要求的.
(a | b) 只能出现其中和一个,且一次.
我们再来看看其它一些例子:
theRegularExpression
=
/
Wis[abcd]niewski
/
//
'a', 'b', 'c', 'd' 其中的一个
theRegularExpression = / Wis[abcd] ? niewski / // 'a', 'b', 'c', 'd' 其中的一个,但不是必须的
theRegularExpression = / Wis[a - zA - Z]niewski / // 必须有一个从a-z的大写或小写字符出现
theRegularExpression = / Wis[ ^ abcd]niewski / // 除'a','b','c','d'以外其它字符
theRegularExpression = / Wis[abcd] ? niewski / // 'a', 'b', 'c', 'd' 其中的一个,但不是必须的
theRegularExpression = / Wis[a - zA - Z]niewski / // 必须有一个从a-z的大写或小写字符出现
theRegularExpression = / Wis[ ^ abcd]niewski / // 除'a','b','c','d'以外其它字符
正则表达式符号的说明:
Regular Expression Operators
a? matches 0 or 1 occurrence of *a* 'a' or empty string
a* matches 0 or more occurrences of *a* empty string or 'a' , 'aa' , 'aaa' , etc
a+ matches 1 or more occurrences of *a* 'a' , 'aa' , 'aaa' , etc
a|b match *a* or *b* 'a' or 'b' -
. match any single character 'a' , 'q' , 'l' , '_' , '+' , etc
[ woeirjsd ] match any of the named characters 'w' , 'o' , 'e' , 'i' , 'r' , 'j' , 's' , 'd'
[ 1-9 ] match any of the characters in the range ' 1 ' , ' 2 ' , ' 3 ' , ' 4 ' , ' 5 ' , ' 6 ' , ' 7 ' , ' 8 ' , ' 9 '
[ ^13579 ] match any characters not named even digits , or any other character
(ie) group an expression (for use with other operators) 'ie'
^a match an *a* at the beginning of a line 'a'
a$ match an *a* at the end of a line 'a'
a? matches 0 or 1 occurrence of *a* 'a' or empty string
a* matches 0 or more occurrences of *a* empty string or 'a' , 'aa' , 'aaa' , etc
a+ matches 1 or more occurrences of *a* 'a' , 'aa' , 'aaa' , etc
a|b match *a* or *b* 'a' or 'b' -
. match any single character 'a' , 'q' , 'l' , '_' , '+' , etc
[ woeirjsd ] match any of the named characters 'w' , 'o' , 'e' , 'i' , 'r' , 'j' , 's' , 'd'
[ 1-9 ] match any of the characters in the range ' 1 ' , ' 2 ' , ' 3 ' , ' 4 ' , ' 5 ' , ' 6 ' , ' 7 ' , ' 8 ' , ' 9 '
[ ^13579 ] match any characters not named even digits , or any other character
(ie) group an expression (for use with other operators) 'ie'
^a match an *a* at the beginning of a line 'a'
a$ match an *a* at the end of a line 'a'
有件事情你是必须知道的,假如你想匹配一个上面有特殊意思的符号,比如?,
你必须在?前面加'/'进行转义.
我们来看看这个例子:
check(
"
I love beijing?
"
,
/
[
^/?
]
+/?/)
这可能是你遇到的第一个难看的正则.然而这种情况在Perl语言里面是
经常出现的.
遇到这种情况,我们可以把规则拆开开看:
/ 正则开始
[^/?] 不能是?号
+ 出现一次或多次
/? 匹配?
/ 正则结束
这样的话,这个正则就很清楚了.
输出为: true.