我想创建接受这些值的regexp:
number:number [P]
或[K]
或者两者都没有,现在它可以用分隔符[ + ]
再次重复它,所以例如有效值是:
15:15
1:0
1:2 K
1:3 P
1:4 P K
3:4 + 3:2
34:14 P K + 3:1 P
我创造的是:
([0-9]+:[0-9]+( [K])?( [P])?( [+] )?)+
这个例子只有一个错误。它接受值:
15:15 K P +
不应该被允许。
我应该如何改变它?
更新:
我忘了提及它可以是K P或P K.或者值是有效的
1:4 K P
答案 0 :(得分:0)
试试这个正则表达式:
^([0-9]+:[0-9]+(?: P)?(?: K)?(?: \+ [0-9]+:[0-9]+(?: P)?(?: K)?)*)$
更新:根据您的评论,您可以使用此评论,反之亦然,但它也会匹配P P
或K K
^([0-9]+:[0-9]+(?: [KP]){0,2}(?: \+ [0-9]+:[0-9]+(?: [KP]){0,2})*)$
答案 1 :(得分:0)
此正则表达式支持K和P的任何顺序:
^[0-9]+:[0-9]+( P| K| K P| P K)?( \+ [0-9]+:[0-9]+( P| K| K P| P K)?)*$
答案 2 :(得分:0)
怎么样:
^(\d+:\d+(?:(?: P)?(?: K)?|(?: P)?(?: K)?)?)(?:\s\+\s(?1))?$
说明:
^ : start of string
( : start capture group 1
\d+:\d+ : digits followed by colon followed by digits
(?: : non capture group
(?: P)? : P in a non capture group optional
(?: K)? : K in a non capture group optional
| : OR
(?: K)? : K in a non capture group optional
(?: P)? : P in a non capture group optional
)? : optional
) : end of group 1
(?: : non capture group
\s\+\s : space plus space
(?1) : same regex than group 1
)? : end of non capture group optional
$ : end of string
答案 3 :(得分:0)
您可以使用此模式:
^(?:[0-9]+:[0-9]+(?:( [KP])(?!\1)){0,2}(?: \+ |$))+$
模式细节:
^
(?: # this group describes one item with the optional +
[0-9]+:[0-9]+
(?: # describes the KP part
( [KP])(?!\1) # capture current KP and checks it not followed by itself
){0,2} # repeat zero, one or two times
(?: \+ |$) # the item ends with + or the end of the string
)+$ # repeat the item group
Java风格的:
^(?:[0-9]+:[0-9]+(?:( [KP])(?!\\1)){0,2}(?: \\+ |$))+$