/^[a-z] # Start with a letter. (?: # Start grouping. [^-] # Anything other than a hyphen | # Or -(?!-) # A hyphen not followed by another hyphen )* # End group. Match 0 or more of those groups. (?<=[a-z])$ # The end, as long as it is preceded by a letter. /ix # Match case insensitively and allow comments.