正则表达式以匹配用点分隔的单个单词或仅允许使用星号

时间:2018-12-18 15:52:45

标签: c# regex

我需要一个正则表达式,该表达式仅允许一个星号或以点和一个星号分隔的作品。例如:

test.test   = OK
test.test*  = OK
*           = OK

.                       = NO
_                       = NO
test.*                  = NO
test.test               = OK
test.test2              = OK
test*                   = OK
te*st                   = NO
test*.test              = NO

这是我到目前为止所做的

^[a-z0-9*.\-_\.:]+$

允许的非字符是点和一个星号 允许使用的字符是小写字母

2 个答案:

答案 0 :(得分:2)

您可以使用此

DoStuff(int)
  • ^[a-zA-Z0-9]+?\.?[a-zA-Z0-9]+?\*?$|^\*$ -字符串的开头。
  • ^-一次或多次匹配任何字母或数字(惰性模式)。(?使其为可选)
  • [a-zA-Z0-9]+?-匹配\.?
  • .-匹配\*?
  • *-字符串结尾。
  • $-交替出现。
  • |-匹配^\*$

Demo

让我知道我是否错过任何情况。

答案 1 :(得分:2)

所以您想要:

  • 1个星号
  • 由点分隔的单词序列,只有最后一个单词后可以带有星号

^((\*)|([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)*\*?)$

请注意,[a-zA-Z0-9]+应该适合您的真正意思。在我的回答中,它只是一个或多个字母数字字符。