我想要一个正则表达式,它匹配一个点.
,它在下一个点.
或行尾之前的某个点后面有一个字母。
例如,以下内容有效:.foo.bar
。
.foo.123
无效,因为它包含.123
,后面没有字母。
到目前为止,我已经:
^([a-z0-9)]|\.(?=.*[a-z].*\.))+$
我理解上面的问题是正面前瞻中.
的最终匹配:它总是无法匹配。我想像“如果点存在匹配,否则匹配行尾”。如果我使用($|\.)
代替最终匹配,这仍然不起作用,我假设因为即使.
匹配也会尝试。
我想避免使用后视镜。我希望匹配整个字符串,而不仅仅是点。
答案 0 :(得分:1)
这个正则表达式可能会有一些小的改动应该有效。 ^(?:\.[^\.\s]*[a-zA-Z][^\.\s]*)+$
Regex101 demo。
分解其工作原理:
^
- 开始新行(?:\.[^\.\s]*[a-zA-Z][^\.\s]*)
- 抓取句号,然后是下一个句号或新行之前的所有文字。确保至少有一个字母。
\.
- 从句号开始。[^\.\s]*
- 任何空格或.
任意次数。[a-zA-Z]
- 确保每个期间至少有一个字母。[^\.\s]*
- 任何空格或.
任意次数。+
- 一次或多次$
- 行尾