无法找出匹配aa但不是aaa的正则表达式模式。
x <- c("ab", "abc", "abcc", "abccc", "abcccc", "abccccc")
grep(pattern="c{2,3}", x, value=TRUE, perl=TRUE)
## [1] "abcc" "abccc" "abcccc" "abccccc"
grep(pattern="^((?!c{4,}).)*$", x, value=TRUE, perl=TRUE)
## [1] "ab" "abc" "abcc" "abccc"
但是产生的模式是什么:
grep(pattern=..., x, value=TRUE, perl=TRUE)
## [1] "abcc" "abccc"
答案 0 :(得分:2)
这适用于您的测试用例:
^[^c]+c{2,3}$
答案 1 :(得分:1)
但是产生1“abcc”“abccc”
的模式是什么
您需要确保2 {3} c
不在c
之前或之后:
grep(pattern="(^|[^c])c{2,3}([^c]|$)", x, value=TRUE)
<强>详情:
(^|[^c])
- 匹配字符串开头(^
锚)或除c
以外的任何字符的替换组(带有否定字符类(括号表达式)[^c]
) c{2,3}
- 2或3 c
s ([^c]|$)
- 匹配字符串结尾($
锚)或除c
以外的任何字符的替换组或者,如果c
实际上是多字符子字符串的占位符,请使用带有外观的PCRE正则表达式:
grep(pattern="(?<!c)c{2,3}(?!c)", x, value=TRUE, perl=TRUE)
请参阅R demo
如果在{2} {3}之前有一个(?<!c)
,并且c
否定预测在比赛中失败,则c
否定后卫会使比赛失败{2} (?!c)
之后的c
。