Invalid regular expression : Dangling meta character “*”

后端 未结 2 1468
猫巷女王i
猫巷女王i 2021-01-25 10:07

I am creating an identification window with login and username for JavaFX, and I am using regex to make sure that the password contains at least one special character and one di

相关标签:
2条回答
  • 2021-01-25 10:47

    The * quantifier "repeats" (quantifies) the pattern it modifies zero or more times in a greedy way (allows the regex engine to "take" (=consume) as many chars as it can with the given pattern). If * or any other quantifier appears at the start of a pattern, there is no pattern the quantifier can modify, and the error appears.

    That is, *abc* glob pattern used as a regex will produce this same issue, as well as {1,}abc.*, +abc.* or {5}+abc.*, etc.

    You may fix the pattern by simply adding a dot in front of the * here since you expect to match a string that contains a pattern digits...non-word chars...:

    newValue.matches(".*\\d+.*\\W+.*")
    //                ^
    

    However, a better, more efficient pattern here would be

    newValue.matches("\\D*\\d\\w*\\W.*")
    

    It matches

    • start of string (matches requires a full string match)
    • \D* - zero or more non-digit chars
    • \d - a digit
    • \w* - 0 or more word chars
    • \W - a non-word char
    • .* - any zero or more chars other than line break chars as many as possible.
    • end of string (matches requires a full string match).
    0 讨论(0)
  • 2021-01-25 11:08

    In regular expressions, the Kleene star * means "zero or more matches of the preceding character (class) or group". But in your case, there is nothing preceding, the star is the first character in your regex string. That's what the error indicates.

    If you actually want to match an asterisk you have to escape it with backslashs:

    "\\*\\d+.*\\W+.*"
    
    0 讨论(0)
提交回复
热议问题