我在使正则表达式工作时遇到了问题。
正则表达式为:
([0-9]m)* ([0-9]f)*
数字必须在“m”或“f”之前,但“m”或“f”是可选的。例如:
1m 2f
1m
6f
我做错了什么?
答案 0 :(得分:8)
*
表示匹配前一个令牌0次或更多次,这看起来并不像你想要的那样。
这些应该可以帮助您构建所需的正则表达式:
?
表示0或1场比赛。|
进行更改。(?:...)
表示非捕获组。^
和$
锚定在字符串的开头和结尾。知道这一点,我想你可以自己找到解决方案,但为了完成,我将展示一种可能的解决方案。
您的问题不是很清楚,所以我只是假设您希望以下内容匹配:
1m 2f
1m
6f
0m
并且您希望以下内容无法匹配:
1
m
11m
1m 1m
2f 3m
1m 2f
"1m 2f"
如果这些假设不正确,那么请更清楚地说明问题。
根据这些假设,试试这个:
^[0-9]m(?: [0-9]f)?$|^[0-9]f$
如果您还希望2f 3m
匹配,请使用以下内容:
^[0-9]m(?: [0-9]f)?$|^[0-9]f(?: [0-9]m)?$