正则表达式 - 无法匹配此字符串

时间:2011-05-10 21:53:59

标签: ruby regex

我正在编写一个需要模式匹配的ruby脚本。我得到了最多,但我无法匹配长01122223_200000_1717181字符串使用 / (\d+\_+\d+)*/

虽然/ \**|TYPE:|\=*/与以下模式匹配。我无法弄清楚为什么。我也检查了模式匹配的顺序。

有人有任何建议吗?

4 个答案:

答案 0 :(得分:3)

你的模式不止一件事,但我认为只有一件事导致匹配失败:

  • 你的括号稍微偏了。
  • 在下划线后面有+,但我认为你不需要/需要一个。{/ li>
  • 你在模式的开头有一个额外的空格。

其中,可能唯一阻止你获得比赛的问题是最后一个问题。该模式的其余部分应该仍然匹配,但可能不是你想要它的方式(意味着它将匹配一些你不希望它匹配的东西)。我会选择这个:

/\d+(_\d+)+/

如果要接受没有下划线的模式(例如999999),请使用:

/\d+(_\d+)*/

关于您的第二个问题:匹配/ \**|TYPE:|\=*/的原因是\**\=*使用*作为量词,而不是+ {1}}。这意味着即使输入中根本不包含*=个字符,它们也会匹配。 \=*匹配一个空字符串,因此该表达式将匹配任何输入。将其更改为/ \*+|TYPE:|\=+/,它不再匹配。

答案 1 :(得分:2)

为匹配第一个字符串(01122223_200000_1717181),这可能会起到作用:/(\d+_)+\d+/

答案 2 :(得分:0)

我或多或少的第一个想法是:

/\d+(_\d+)*/

答案 3 :(得分:-1)

应该很容易。只需使用范围。

/[\d_]*\d/