正则表达式匹配后面有字母的点,下一个点或行尾之前

时间:2017-09-13 18:00:58

标签: regex

我想要一个正则表达式,它匹配一个点.,它在下一个点.或行尾之前的某个点后面有一个字母。

例如,以下内容有效:.foo.bar

.foo.123无效,因为它包含.123,后面没有字母。

到目前为止,我已经:

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

我理解上面的问题是正面前瞻中.的最终匹配:它总是无法匹配。我想像“如果点存在匹配,否则匹配行尾”。如果我使用($|\.)代替最终匹配,这仍然不起作用,我假设因为即使.匹配也会尝试。

我想避免使用后视镜。我希望匹配整个字符串,而不仅仅是点。

1 个答案:

答案 0 :(得分:1)

这个正则表达式可能会有一些小的改动应该有效。 ^(?:\.[^\.\s]*[a-zA-Z][^\.\s]*)+$

Regex101 demo

分解其工作原理:

  • ^ - 开始新行
  • (?:\.[^\.\s]*[a-zA-Z][^\.\s]*) - 抓取句号,然后是下一个句号或新行之前的所有文字。确保至少有一个字母。
    • \. - 从句号开始。
    • [^\.\s]* - 任何空格或.任意次数。
    • [a-zA-Z] - 确保每个期间至少有一个字母。
    • [^\.\s]* - 任何空格或.任意次数。
  • + - 一次或多次
  • $ - 行尾