Q
了解否定字符类
3
A
回答
3
+
使一个f
在2个或更多的'
之后被找到后使正则表达式引擎回溯。你可以用'
替代负先行防止(以免消耗比f
和'
以外的文字,当您使用[^f]
,性格成为比赛的一部分,因为一个否定的字符类是消费模式和向前看符号是零宽度断言)。
''+(?!['f])
见regex demo。这里,(?!['f])
将防止匹配,如果2个或更多'
符号跟在f
或'
之后。另外,您可以使用限制量词{2,}
(2次或更多次出现次数)编写它:'{2,}(?!['f])
。
如果您正则表达式引擎支持占有欲量词防止回溯到量化模式,使用一个:
''++(?!f)
^^
见another demo(写作的另一种方式是'{2,}+(?!f)
)。
如果您使用的是不支持的占有欲量词一个.NET regex库,你可以使用,而不是原子团(即以同样的方式作为占有欲量词,但整个组):
(?>'{2,})(?!f)
1
,因为那一撇是不是一个f
一个字符。
示例正则表达式匹配“至少有2个撇号,其后跟一个而不是f
”。
你看,最后一场比赛确实没有包括那个f
,而是撇号。所以,如果你要排除的最后一场比赛,你可能更喜欢这个表达式
''+[^'f]
0
所有你需要的是一个atomic group所以正则表达式将无法回溯到一个单引号,这是不是一个“F”:
/(?>''+)[^f]/
你可以玩它here。
如果你的引擎支持possessive quantifiers,那么你可以使用他们太:
/''++[^f]/
如果你想接受的任何字符既不撇号,也不是F,则可以定义排除只是另一个角色:
/''+[^'f]/
相关问题
- 1. PVS-Studio是否了解Unicode字符?
- 2. 了解字符数组[]和字符串
- 3. 正则表达式 - 理解否定字符类
- 4. 了解字符串加密
- 5. C了解行字符串
- 6. 了解日期字符串
- 7. 了解HTML元字符集
- 8. 了解字符引用
- 9. 了解字符串#succ
- 10. 误解了类和定义
- 11. POSIX字符分类与否定
- 12. 如何检查字符串中是否只定义了符号?
- 13. 否定字符类匹配字符序列
- 14. 检查事件发生后是否解析了字符串?
- 15. 定期exception.Any字符除了
- 16. 了解函数成分与否定
- 17. Python了解类
- 18. 了解类图
- 19. 了解proc类
- 20. 了解类型
- 21. 了解类
- 22. fread()将所有列类指定为字符,甚至指定了
- 23. 试图了解字符串类型的DLL返回
- 24. 问题了解字符串模式
- 25. JavaScript,了解查询字符串
- 26. 了解格式字符串漏洞
- 27. 了解字符串方法条
- 28. 了解mysql字符集和整理
- 29. 了解PHP中的字符编码
- 30. 了解反向字符串的代码
它匹配*两个撇号*和一个不是'f'的字符(第三个撇号)... – deceze
''匹配第一个撇号,'+'匹配第二个,'[^^f]'匹配第三个... – kennytm