我是一个完全正念的新手。我正在尝试为带有连字符的字符串写一个正则表达式,后面跟着1到9之间的任何数字,然后是{mo,w,h,m,d}中的任何一个。我提出了:
-[1-9]+(mo)?|[h|w|d|m]
这并不是我想做的事。
对于ex:它匹配-2wh,它不应该。我做错了什么?
答案 0 :(得分:2)
你几乎做对了..只是一个小小的改变:
- ([1-9] +)(MO | [hwdm])
如果你想限制字符串,你必须添加它(
)^ - ([1-9] +)(MO | [hwdm])$
另请注意-10h不会起作用,因为你排除了零..如果你想包括它但不是因为第一个数字就像这样容易:
^ - ([1-9] [0-9] *)(MO | [hwdm])$
答案 1 :(得分:1)
您可以使用:
-[1-9]+(mo|[hwdm])
答案 2 :(得分:0)
这是正确的正则表达式的更正版本:
^-[1-9]+((mo)|[hwdm])?$
^
(字符串的开头)和$
(字符串的结尾)符号。这就是为什么你的正则表达式接受-2wh
字符串(包含匹配的有效-2w
字符串)的原因。(mo)?|[h|w|d|m]
,稍微重构了你的正则表达式
((mo)|[hwdm])?
,-2
),请从此正则表达式中删除-8
?
替换为[1-9]+
答案 3 :(得分:0)
你忘了锚定表达式。它验证很好,但在你验证之前和之后都可以有任何东西:
^
锚意味着“行首”$
锚意味着“行尾”因此,根据此验证您的输入应该有效:
^-[1-9](mo?)|[hwd]$
请注意,在括号内,您不需要管道(|
)来分隔字符。 [hwd]
与h|w|d
相同。
答案 4 :(得分:0)
我认为这样做,加它不会捕获不必要的组:
^-[1-9](?:mo|w|h|m|d)$
如果要捕获1到9之间的更多数字,请使用[1-9]+
。如果您只想匹配数字,请使用\d+
。
HTH