正则表达式匹配点分隔的列表,结尾不带点,并在最后允许星号

时间:2018-11-27 08:59:23

标签: c# regex

我有以下输入字符串,我需要一个正则表达式来验证输入。

.after()

这是我的正则表达式,它可以正常运行,但无法成功验证输入:

test.test = OK
test.test.1 = OK
test.text* = OK

test.test. = NO
test.test.* = NO
test = NO

我如何使它工作?

3 个答案:

答案 0 :(得分:1)

您可以使用

^(?!.*[.*]{2})[a-z0-9*_:-]+(?:\.[a-z0-9*_:-]+)+$

请参见regex demo(在regexstorm中,行尾为CRLF,\r?仅用于多行字符串演示目的)。

详细信息

  • ^-字符串的开头
  • (?!.*[.*]{2})-不允许连续两个.*
  • [a-z0-9*_:-]+-1个或多个ASCII小写字母,数字,*_:-
  • (?:\.[a-z0-9*_:-]+)+-1次或多次连续出现
    • \.-一个点
    • [a-z0-9*_:-]+-1个或多个ASCII小写字母,数字,*_:-
  • $-字符串的结尾。

答案 1 :(得分:1)

我认为这可以解决您的问题。

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

说明

^-字符串的开头。

[a-z0-9]-此范围内的任何字符均有效。

+-一个或多个。

\.-匹配文字。 (句点)。

((\.[a-z0-9]+)|\*)?-

    (\.[a-z0-9]+) - this sub-group checks for . followed by any digit or characters
    \*         - matches for asterisk
    ?          - make the preceding group optional.

$-锚定到行尾

答案 2 :(得分:0)

根据您给出的有效和无效的文本样本,我得出以下结论,

  1. 文本将包含文字字符。
  2. 单词字符可以用单点分隔。像这样的abc.xyzaaa.bbb.ccc
  3. 点号不能是第一个或最后一个字符。 .abcabc.aaa.
  4. 不好
  5. (可选)星号(星号)只能显示为最后一个字符。因此,test.text*很好,因为test.text很好,但是test.text.*不好,因为test.text.不好。

考虑到这些规则,您可以使用以下正则表达式,

^\w+(\.\w+)*(?<!\.)[*]?$

说明:

  • ^->字符串开头
  • \w+->匹配一个或多个长度的单词
  • (\.\w+)*->匹配零个或多个开头的单词字符,零个或多个匹配单个文字点。
  • (?<!\.)[*]?->可以在字符串的末尾选择星号字符,但不能在其后加上文字点
  • $->输入结束。

Demo