正则表达式匹配slu ??

fed*_*o-t 11 php regex

我在创建正则表达式匹配URL slugs时遇到了麻烦(基本上,单个破折号分隔的字母数字"单词" )

this-is-an-example
Run Code Online (Sandbox Code Playgroud)

我想出了这个正则表达式:/[a-z0-9\-]+$/虽然它将字符串限制为只有字母数字字符和短划线,但它仍会产生一些误报,如下所示:

-example
example-
this-----is---an--example
-
Run Code Online (Sandbox Code Playgroud)

我对正则表达式很不好,所以任何帮助都会受到赞赏.

Roh*_*ain 45

你可以用这个:

/^
  [a-z0-9]+   # One or more repetition of given characters
  (?:         # A non-capture group.
    -           # A hyphen
    [a-z0-9]+   # One or more repetition of given characters
  )*          # Zero or more repetition of previous group
 $/ 
Run Code Online (Sandbox Code Playgroud)

这将匹配:

  1. 一系列字母数字字符开头.
  2. 然后它将匹配一个连字符,然后是一系列字母数字字符,0次或更多次.

  • 对于懒人:`/^[a-z0-9]+(?:-[a-z0-9]+)*$/` (14认同)
  • @Yandiro `/^[a-z0-9]+(?:[_-][a-z0-9]+)*$/` (4认同)
  • @mathieug 首先,作者不需要捕获组,那么将其包含在结果中有何意义?其次,该组是重复的,因此对于重复的捕获组,只会捕获最后一个重复。 (2认同)