正则表达式不匹配重复特殊字符

时间:2015-05-11 10:22:31

标签: ruby regex

我正在做正则表达式来检查slu .. 实际上我的正则表达式是:/^[^-][a-z\-].*[^-]+$/

这是我现在正在检查的内容:

my-awesome-project =>有效

-my-awesome-project =>无效

my-awesome-project- =>无效

现在我想要的是检查短划线是否重复:

my-awesome-project =>应该是有效的

my-awesome--project =>不应该有效

my----awesome-project =>不应该有效

我可以使用正则表达式吗?

谢谢,

3 个答案:

答案 0 :(得分:3)

我认为这个正则表达式应该有效:

/^[a-z]+(-[a-z]+)*$/

这样做:^[a-z]+匹配,如果字符串至少以字符开头。之后,可能会有(-[a-z]+)*$个零或更多的短划线,然后再出现至少一个角色。

Rubular

答案 1 :(得分:1)

据我了解,该字符串有效,除非:

  • 包含小写字母或连字符以外的字符
  • 以连字符开头,
  • 以连字符结束,或
  • 连续包含两个(或更多)连字符。

如果是这种情况,最简单的方法是检查它是否无效:

R = /
    [^a-z-] # match one character other than a lower-case letter or hyphen
    |       # or
    ^-      # match a hyphen as the first character
    |       # or
    -$      # match a hyphen as the last character
    |       # or
    --      # match two hypens
    /x    

def valid?(str)
  str !~ R
end

valid? 'my-awesome-project'    #=> true 
valid? '-my-awesome-project'   #=> false 
valid? 'my-awesome-project-'   #=> false 
valid? 'my-awesome--project'   #=> false 
valid? 'my----awesome-project' #=> false 

答案 2 :(得分:0)

以下正则表达式可能会有所帮助。

[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*