我需要理解这样的模式:^9(ab|cd|ef?)$
我有一些字符串传递的例子,但没有传递这种模式:
9 - NO
9cd - YES
9e - YES
9acef - NO
我不知道为什么第三个例子被接受而第四个例子没有被接受。
我看到这样的模式:9
然后a
然后(b or c
)然后(d or e
)然后f
(零或一次)。但我认为比我的理解不正确。有人可以解释一下如何看待它吗?
答案 0 :(得分:1)
我看到这样的模式:9然后是a(b或c)然后是(d或e)然后是f(零或一次)。
错误。它实际上就像9 ab
或cd
或ef
或e
以及行边界的一端。因此,此正则表达式将匹配9e
但不匹配9acef
。 9之后允许的最大和最小字符数为2( ab,cd,ef )或1( e )
,即不超过2. ?
此处会将前一个标记变为可选标记,ef?
匹配ef
或e
。
答案 1 :(得分:1)
管道意味着OR。 (ab|cd|ef?)
表示ab OR cd或e后跟f可能。必须存在其中一种替代方案,但不能有多种替代方案。
^和$是锚点,用于指示输入的开始和结束位置。 $ anchor表示输入的结尾必须紧跟与(ab|cd|ef?)
匹配的内容。
9:没有其他选择,但这不匹配。
9cd:存在cd替代品,因此匹配。
9e:存在更多fs替代品的e和0,这匹配。
9acef:存在两个替代方案,输入结束直到ef之后才出现;由于正则表达式指定输入的结尾必须在其中一个替代方案之后,并且出现两个替代方案,因此不匹配。
答案 2 :(得分:1)
^9(ab|cd|ef?)$
转换为:
9
,后跟ab
或cd
或ef
或e
。
符合您期望的模式是:
9a(b|c)(d|e)f?$
答案 3 :(得分:1)
9(ab|cd|ef?)
表示: 9 ,然后是 ab 或 cd 或 ef 或 e (由此f是可选的,由?
煽动。
^
和$
分别标记字符串的开头和结尾。
提示:许多正则表达式测试程序(例如regexr.com)提供鼠标悬停时键入的正则表达式的解释。