写在最前面:
本文主要为了解决在单正则式中表示非/不包含某字符串的问题。需要用到perl=T
当然可以使用grep+!grep联合表示,but我懒。
一、引入及概念
#eg.
> grepl("[^脑].*室","室")
[1] FALSE
原因:[ ^脑]表示非脑,但需要消耗字符串中的字符,即需要一个字符位于室前面,来匹配[ ^脑]。
解决方法:使用不消耗字符串中字符的正向预查/反向预查,即(?=PATTERN)和(?!PATTERN)
二、正向向后预查
eg. grepl("(?=PATTERN1)PATTERN2",x)
匹配顺序:在x中先匹配PATTEN2,然后在匹配上PATTERN2的地方向后匹配PATTERN1PATTERN2。如果PATTERN以.*开头,则不要求PATTERN1和PATTERN2的顺序。