正则表达式 学习资料整理

  反向引用

反向匹配可以引用前面组中的匹配形式。“\匹配组的数字表示“或者”\k groupname “

  高级组

1.  正声明

规定了括号中的模式必须出现在声明的右侧。模式将不构成匹配的一部分。

2.  负声明

规定了括号中的模式不能出现在声明的右侧,模式将不构成匹配的一部分。

3.  反向正声明

规定了括号中的模式必须出现在声明的左侧,模式将不构成匹配的一部分。

4.  反向负声明

规定了括号中的模式必须出现在声明的左侧。模式不构成匹配的一部分。

5.  非回溯

防止了正则表达式引擎搜索失败时回溯,这称之为贪婪的子表达式。

如输入字符串:he  was very trusting.

正则表达式:.*ing将匹配trusting但是如果加入ing则不能完成匹配。

非回溯组也是非捕获组。他对于提高正则表达式的效率很有效。

如匹配一个www.****.com的网址。使用www\.\.com显然要比www\.\.com效率要低的多,因为前者必须使用组中的回溯操作,回溯是很艰难的过程,所以当使用非回溯的正则表达式时时可以显著提高正则表达式的效率的。

其实正则表达式是只注重匹配结果的,所以会努力去匹配所存在的字符串。这就是它的贪婪性所在。。

注意以上这些都不能够用于反向引用,因为以上声明将不作为匹配的一部分。

2.7在正则表达式中做决策

高级决策的两种写法:

1= yes|no)

2= yes|no)

这两种方式中的的expression匹配则后面进行匹配yes,否则匹配no。

需要注意的一点是yes测试和决策测试是在同一个起点里进行的。

如以下字符串:77-77a 69-aa 57-b

匹配表达式为:?-\d\d[a-z]|[a-z][a-z])

匹配结果为:

1.77-77a  2. –aa

这个正则表达式中用到了引用组,**)中的1也可以换为\1,这样不影响匹配。这个匹配中如果将决策后面的\d\d去掉则会出现不同的结果,这时只会有一个-aa是匹配的。因为决策点和yes表达式是从同一个起点开始匹配所以即使决策点匹配了,但是后面的yes表达式仍然不匹配。就只匹配no部分的表达式。最终结果也必然改变,理解这一点很重要。

2.8 正则表达式的选项

快到结尾了,再说下正则表达式的选项。选项其实就是将正则表达式的设置改到组中来。如将忽略大小写进行匹配。实际上如果学过javascript中的正则表达式,可以看出这个i在javascript中表示的还是这个意思。

Copyright © 2018 乐橙app下载乐橙app下载-乐橙lc8 All Rights Reserved