首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex问题我被困住了

Regex问题我被困住了
EN

Stack Overflow用户
提问于 2015-05-20 10:04:35
回答 4查看 74关注 0票数 1

我必须编写匹配模式1-6/2011的正则表达式。在这种情况下,/前的数字不能大于12。所以我必须在1-12之间选择数字。

我写了一份意向书:

代码语言:javascript
运行
复制
^[1-9][0-2]?\s*[-−—]\s*[1-9][0-2]?\s*/\s*2[01][0-9][0-9]$

然而,在这里,我得到了20-6/2014也作为一个匹配。

我用消极的眼光看了看:

代码语言:javascript
运行
复制
^[1-9](?<![2-9])[0-2]?\s*[-−—]\s*[1-9](?<![2-9])[0-2]?\s*/\s*2[01][0-9][0-9]$

在这里,个位数没有被识别出来。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-20 10:15:44

您可以使用以下regex更新:

代码语言:javascript
运行
复制
^(?:0?[1-9]|1[0-2])\s*[-−—]\s*(?:0?[1-9]|1[0-2])\s*/\s*\s*2[01][0-9]{2}$

请参阅演示

它不能与12-30/201412-31/201412-32/201413-31/201420-6/2014相媲美。

它将与1-6/201102-12/2014相匹配。

C#:

代码语言:javascript
运行
复制
var lines = "1-6/2011\r\n02-12/2014\r\n12-30/2014\r\n12-31/2014\r\n12-32/2014\r\n13-31/2014\r\n20-6/2014";
var finds = Regex.Matches(lines, @"^(?:0?[1-9]|1[0-2])\s*[-−—]\s*(?:0?[1-9]|1[0-2])\s*/\s*\s*2[01][0-9]{2}\r?$", RegexOptions.Multiline);

请注意,只有当我们在多行模式下进行测试时,\r?才是必要的。您可以在检查单独的值时删除它。

票数 1
EN

Stack Overflow用户

发布于 2015-05-20 10:08:19

所以我必须在1-12之间选择数字。

为此,可以使用regex。

代码语言:javascript
运行
复制
(?:0?[1-9]|1[0-2])

见演示。

https://www.regex101.com/r/fJ6cR4/23

票数 1
EN

Stack Overflow用户

发布于 2015-05-20 10:10:00

您可以使用这个regex:

代码语言:javascript
运行
复制
^(?:[1-9]|1[0-2])\s*-\s*(?:[1-9]|1[0-2])\s*/\s*2[01]\d{2}$

RegEx演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30346482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档