2012-03-09 127 views
-1

我想学习正则表达式,并希望有人能帮助我。希望如果有人能帮助我拿出一个正则表达式来验证输入的形式必须是输入验证的正则表达式

Graph: XY5, YZ4, ST7 

每个部分如XY5表示在图中的边和所述数字表示边的权重的。可以有任何数量的这种边缘。

这是我到现在为止。这可能是不正确的

"^Graph:\\s{1}[A-ZA-Z\\d,\\s]+" 
+3

“这可能是不正确的” - 你真的尝试吗? – 2012-03-09 21:04:13

+0

是的,我做到了。它说我的输入相符,但我无法令人信服地解释它。所以这就是我说我做了什么的原因。不明确的道歉。 – Satyam 2012-03-09 21:09:51

+0

@deathApril - 那根本就是错的。在括号内,'0-9'和'\ d'完全相同。但是,由于他有很多其他的东西,所有这些东西都是可选的:'/ [a-z \ d] /'会匹配一个字符或一个数字,但绝对不是斜线! – 2012-03-09 21:16:36

回答

1

这可能是你在找什么:

/^Graph: (?:[A-Z]{2}\d(?:$|, ?))+/ 

在这里看到它在行动:http://regexr.com?309av


这里的正则表达式做什么(截图来自RegexBuddy的解释,这是如果你想学习正则表达式,可能是最好的工具):

enter image description here

+0

为“试图学习”,“(?:aaa)'[关闭捕捉反向引用](http://www.regular-expressions.info/brackets.html)和在所有语言中都不支持... – Aprillion 2012-03-09 21:19:34

+0

您是否认为将$放在最后?所以它不会匹配'Graph:XY5,'from'“Graph:XY5,something incorrect”' – Aprillion 2012-03-09 21:33:32

+0

@deathApril - 正在考虑它,但OP的要求太模糊了,所以我不确定他是否想要以匹配。 – 2012-03-09 21:46:48

0

你应该更好地解释你的输入格式。这可以做到这一点,从我的单一例子和你说的。它不允许图表为空,这可能会或可能不会成为您的要求的一部分。

"^Graph:(\s\w{2}\d+,?)+" 

解释:

^Graph:将覆盖线

(\s\w{2}\d+,?)+ 

\s的开始是一个空格

\w{2}比赛正好2个字母数字字符(提示:你可以把这个更好!)

\d+匹配1个或多个数字,因为我假设边缘可以有两位数的长度(如10)

,?可选地匹配逗号。 (提示:你可以做得更好,因为它不会在每个条目之间使用逗号,也许通过使用or和字符串分隔符的末尾!)

我特意留下了一些改进空间,因为如果你自己想一些它,你会实现你的目标,使用正则表达式变得更好。

0

试试这个

/^Graph:(\s+[A-Z][A-Z]\d+)+$/