当字符串没有点但是它将匹配多个点时不匹配

时间:2018-03-08 19:34:30

标签: regex

我想在0或多个点时匹配字符串。我只能匹配多个点而不是0点的正则表达式。

(\w*)((\w*\.)+\w*)

这些是我正在使用的测试字符串

dial.check.Catch.Url
dial.check.Catch.Url.Dial.check.Catch.Url
32443.324342.23423424.23.423.423.42.34.234.32.4..2..2.342.4
234dfasfd2aa4234234.234aa341.4.123daaadf.df.af....
12fd.dafd
.
abc

正则表达式将匹配这些

dial.check.Catch.Url
dial.check.Catch.Url.Dial.check.Catch.Url
32443.324342.23423424.23.423.423.42.34.234.32.4..2..2.342.4
234dfasfd2aa4234234.234aa341.4.123daaadf.df.af....
12fd.dafd
.

但不是这一个:

abc

https://regexr.com/?38ed7

2 个答案:

答案 0 :(得分:0)

如果你真的必须使用正则表达式,这里有一个(但效率很低):

/^(?![^.]*\.[^.]*$).*$/

它说:

  

匹配一个字符串,以便字符串的开头是而不是,后跟一个带有单个点的整个字符串。

在解析负前瞻时,它会进行一些回溯。

正如对问题的评论中所提到的,我确实认为,除非必须拥有正则表达式,否则简单的函数可能会更好。但是如果你喜欢正则表达式的简洁性并且性能不是一个大问题,那么你可以选择我上面提到的那个。与" nots"的正则表达式在他们身上通常有点混乱,但一旦你理解了他们的可见性。欢呼声。

答案 1 :(得分:0)

/\..*\.|^[^.]*$/

或者,用简单的英语:

  

匹配一个点,然后匹配任意数量的字符,然后匹配另一个点;或者字符串的开头,然后是任意数量的非点,然后是字符串的结尾。