修复不正确匹配两个连续字符的正则表达式

时间:2019-10-03 13:22:50

标签: regex

我需要一些协助来修复我的正则表达式,该正则表达式应符合以下条件:

  • s和仅s
  • f和仅f
  • dn和仅dn
  • d前面的任何一个或两个整数(例如35d) 或任何带小数的数字
    • ss无效,dnf无效,305d无效

正则表达式:

  • ^(s|f|dn)|(\d{2}d)$使我开始
    • sf匹配,但不匹配。

1 个答案:

答案 0 :(得分:0)

您的|运算符正在吞噬您的锚点!根据{{​​3}},引擎将您的第一个替代项视为^(s|f|dn),将您的第二个替代项视为(\d{2}d)$-因此s是有效的匹配项,因为没有任何必要说在字符串的末尾。

请尝试将您的条款限制在一个非捕获组中,以确保|操作员不会碰到您的锚点:^(?:(s|f|dn)|(\d{2}d))$应该有效; this code sample,似乎同意。

我还看到一条注释,您希望任何十进制数字都有效。为此,您的正则表达式为:^(?:(s|f|dn)|(\d{2}d)|(\d+\.\d+))$-this sample