如何理解正则表达式?

时间:2015-01-30 16:07:16

标签: regex

我需要理解这样的模式:^9(ab|cd|ef?)$

我有一些字符串传递的例子,但没有传递这种模式:

 9 - NO
 9cd - YES
 9e - YES
 9acef - NO

我不知道为什么第三个例子被接受而第四个例子没有被接受。 我看到这样的模式:9然后a然后(b or c)然后(d or e)然后f(零或一次)。但我认为比我的理解不正确。有人可以解释一下如何看待它吗?

4 个答案:

答案 0 :(得分:1)

  

我看到这样的模式:9然后是a(b或c)然后是(d或e)然后是f(零或一次)。

错误。它实际上就像9 abcdefe以及行边界的一端。因此,此正则表达式将匹配9e但不匹配9acef。 9之后允许的最大和最小字符数为2( ab,cd,ef )或1( e )  ,即不超过2. ?此处会将前一个标记变为可选标记,ef?匹配efe

答案 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,后跟abcdefe

符合您期望的模式是:

9a(b|c)(d|e)f?$

答案 3 :(得分:1)

9(ab|cd|ef?) 表示: 9 ,然后是 ab cd ef e (由此f是可选的,由?煽动。

^$分别标记字符串的开头和结尾。

提示:许多正则表达式测试程序(例如regexr.com)提供鼠标悬停时键入的正则表达式的解释。