正则表达式

时间:2018-07-31 11:15:34

标签: c# regex

我想创建一个自定义的正则表达式。它将跟踪用户名的第一个字符应为字母。

后跟字母数字或最多可以出现一个特殊字符(ibmcloud resource service-instance-delete-)。我可以使用_来检查用户名是否以字母开头,但不确定如何最多检查一次特殊字符。任何想法都欢迎。

谢谢

2 个答案:

答案 0 :(得分:1)

根据我对您的帖子的了解,您希望以下内容匹配。

a-afdsafd
aafdsafd
aafdsa_fd
aafdsa-fd
aAfdsa-FD

以下不匹配的内容:

aa-dsa-fd
aa-dsa_fd
-afdsafd
_afdsafd

尝试/^[a-z](?:(?![a-z]+[\-_])[\-_])?[a-z]+(?:(?<![a-z]+[\-_])[\-_]?)[a-z]+?$/i

  1. i修饰符启用不区分大小写的匹配。

  2. ^$锚确保整个字符串与我们的正则表达式匹配。

  3. [a-z]检查第一个字符是字母。

  4. (?:(?![a-z]+[\-_])[\-_])?)先检查一下以后是否没有“特殊字符”,如果没有,我们可以选择匹配一个特殊字符。

  5. [a-z]+匹配一个或多个字母。

  6. (?:(?<![a-z]+[\-_])[\-_]?)的功能与4相同,只不过是后面。

  7. [a-z]+?(可选)匹配一个或多个字母。

https://regexr.com/3t86l

编辑:我注意到aAfdsaFd_也应该匹配。上面与此不符。稍微修改@WiktorStribiżew的注释,^[a-zA-Z][a-zA-Z0-9]*(?:[-_][a-zA-Z0-9]*)?$在所有情况下似乎都可以正常工作。这样更清洁,更高效。全部归功于@WiktorStribiżew。

答案 1 :(得分:0)

您可以从字符串^[a-zA-Z]开始匹配大写或小写字母,匹配零次或多次字母数字[a-zA-Z0-9]*,后跟可选的连字符或下划线[-_]?

最后,将零个或多个字母数字[a-zA-Z0-9]*$匹配到字符串的结尾。

^[a-zA-Z][a-zA-Z0-9]*[-_]?[a-zA-Z0-9]*$