正则表达式连续禁止超过1个破折号

时间:2011-02-04 11:13:13

标签: regex

  1. 我如何禁止--(连续超过1次)?例如ab--c
  2. -在单词后面不允许,例如abc-
  3. -在单词开头不允许,例如-abc
  4. ^[A-Za-z0-9-]+$是我目前所拥有的。

5 个答案:

答案 0 :(得分:27)

^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$

使用此正则表达式,连字符仅在组内匹配。此连字符的每一侧都出现[A-Za-z0-9]+子表达式。因为此子表达式匹配一个或多个字母数字字符,所以连字符不能在开头,结尾或另一个连字符旁边匹配。

答案 1 :(得分:20)

^(?!-)(?!.*--)[A-Za-z0-9-]+(?<!-)$

<强>解释

^             # Anchor at start of string
(?!-)         # Assert that the first character isn't a -
(?!.*--)      # Assert that there are no -- present anywhere
[A-Za-z0-9-]+ # Match one or more allowed characters
(?<!-)        # Assert that the last one isn't a -
$             # Anchor at end of string

答案 2 :(得分:2)

尝试:^([a-zA-Z0-9]+[-]{1})*[a-zA-Z0-9]+$

Regex101链接:https://regex101.com/r/xZ2g6p/1

这仅允许在两个字符集之间使用一个连字符,并在字符集的开始和结尾处将其阻止。

答案 3 :(得分:1)

^[a-zA-Z0-9](?!.*--)[a-zA-Z0-9-]*[a-zA-Z0-9]$

^[a-zA-Z0-9]     /*Starts with a letter or a number*/
(?!.*--)         /*Doesn't include 2 dashes in a row*/
[a-zA-Z0-9-]*    /*After first character, allow letters or numbers or dashes*/
[a-zA-Z0-9]$     /*Ends with a letter or a number*/

<强>匹配

重播/ 重新播放编

不匹配:

重播/重新播放/重播

答案 4 :(得分:0)

如果在字符串的开头和结尾不允许使用“ - ”,则表示您正在搜索“一个或多个alanum,然后是一个或多个一个或多个组的序列,后跟一个或多个alanum” “

{{1}}

简单是正则表达式的宝贵座右铭。 (nota:搜索小案例字符,添加它们。我不明白)