【发布时间】:2019-08-07 17:21:47
【问题描述】:
我正在尝试构建具有以下要求的正则表达式
- 模式应该以字母
a-z开头 - 可以有来自字符类
[\w:-]的任何字符。 - 可以有任意数量的下划线
_,但前提是模式中的某个位置之前有:。
一些有效模式的例子
你好123
你好:123
你好,你好
hello:123-hello_345 # 有效模式,因为_之前的模式中有:
hello-1:hell_world_123
无效模式
hello_123
hello-123_world
hello_123:世界
我尝试过使用前瞻,但由于某种原因它不起作用,下面是我想出的模式
^[a-z]+[a-z0-9:-]*(?<=:)[_]*\w* - 此模式的问题在于,如果字符串中的任何位置都没有 :,它将停止匹配整个模式,因此它使 : 成为必需的模式。
如果:之前的字符串中的任何位置有_,我只想检查:是否存在。
【问题讨论】:
-
正向预读需要存在某种模式,因此如果正向预读模式不匹配,则预计会停止工作。在这些情况下,您需要负前瞻。请参阅下面的答案。