我正在编写一个需要模式匹配的ruby脚本。我得到了最多,但我无法匹配长01122223_200000_1717181
字符串使用
/ (\d+\_+\d+)*/
。
虽然/ \**|TYPE:|\=*/
与以下模式匹配。我无法弄清楚为什么。我也检查了模式匹配的顺序。
有人有任何建议吗?
答案 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/