Regex 我有一个特定的正则表达式,但有一个测试出错了
我要做的就是为“企鹅”做一个正则表达式 规则如下:Regex 我有一个特定的正则表达式,但有一个测试出错了,regex,Regex,我要做的就是为“企鹅”做一个正则表达式 规则如下: 企鹅向右看时用单词Peng表示,向左看时用单词Gnep表示 在每一排中,只有企鹅出现(例如,没有北极熊) 如果企鹅被后续企鹅隐藏,则其单词的后缀将被删除 示例: Pen描述了一只部分隐藏的右眼企鹅 Gn描述了一只被严重隐藏的左眼企鹅 我们只对至少三分之一可见的企鹅感兴趣。其他的都被忽略了。这意味着剩余部分必须至少包含两个字符 一排企鹅是通过连接它们的单词来书写的。两只企鹅排成一行的示例: PengPeng-两只企鹅都清晰可见 GneP
- 企鹅向右看时用单词Peng表示,向左看时用单词Gnep表示
- 在每一排中,只有企鹅出现(例如,没有北极熊)
描述了一只部分隐藏的右眼企鹅Pen
描述了一只被严重隐藏的左眼企鹅Gn
-两只企鹅都清晰可见PengPeng
-右侧企鹅(Peng)隐藏左侧企鹅(GnePeng
)Gne
((P|G)(([eng]|[nep]){1,4}))*((Peng|Gnep)+)
我测试了测试词:
Peng works
Gnep works
Pen doesnt
PengPeng works
PenGnep works
PPeng works - shouldnt
Pooh doesnt
PengPe works - shouldnt
我需要改变什么?通过Regexr.com完成的测试可以使用
^(?:Pe(?:ng?)?|Gn(?:ep?)?)*(?:Peng|Gnep)$
见
详细信息
-字符串的开头^
-零次或多次出现(?:Pe(?:ng?)| Gn(?:ep?)*
-Pe(?:ng?)
后跟可选的Pe
和可选的n
g
-或|
-Gn(?:ep?)
后跟可选出现的Gn
和可选的e
p
-要么(?:Peng | Gnep)
要么Peng
字符串Gnep
-字符串结束$
^(?:Pe(?:ng?)| Gn(?:ep?)*(?:Peng | Gnep)$
,请参阅@WiktorStribiżew,这是有效的。你能解释一下我到底遗漏了什么和困惑了什么吗?@WiktorStribiżew我更感兴趣?:表达。这意味着什么。1)您希望以正确的顺序匹配每个备选方案的可选两个字符,因此,您不能使用像[nep]{1,3}
这样的字符类,它应该使用组和可选结构来构建,(?:n(ep?)
)。2) (?:…)
非常感谢你,Wiktor!干杯