正则表达式:字符串中的每个点都至少有一个前面的字母

时间:2014-08-16 17:24:15

标签: regex

我有以下正则表达式情况: 字符串是字母,数字和点的特定组合。但是,如果每个出现的点至少有一个前置字母,则只应匹配该字符串。 以下示例必须有效:

123f.12ed.ad2d
1s.2s.2d.3wd.fw.e.ss.asda
12312vsd
dss.

这些应无效:

as2.
..ad2
2.12as.
.ad2ads

我尝试过使用lookbehind,但它不能像我需要的那样工作。它验证了无效的字符串。

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

3 个答案:

答案 0 :(得分:1)

你的正则表达式可以在任何地方允许点。你需要限制它们。

^[a-z0-9]*([a-z]\.[a-z0-9]*)*$

所以,没有点的任何东西都可以。然后必须至少有一个字母后跟一个点,然后基本上重复相同的模式任意次。

&#34; a *(ba *)*&#34;高级模式是典型的&#34; a *,可选b:s嵌入&#34; (或者你可以转过来说'#34;(a * b)* a *&#34;)。

你的尝试会允许任何事情,然后在单个字母后面跟踪;但看起来你误解了后视。无论如何,这里确实没有必要。

也许是一个带有&#34;铁路的正则表达式可视化工具&#34;图形可以帮助你掌握正则表达式。例如,尝试https://www.debuggex.com/r/hnpp_ev2utNlZbQC

答案 1 :(得分:1)

这种基于lookbehind的正则表达式应该可以工作:

^(?:[^.]*(?<=[a-zA-Z])\.)*[^.]*$

否则

^(?:[A-Za-z0-9]*(?<=[a-zA-Z])\.)*[A-Za-z0-9]*$

RegEx Demo

答案 2 :(得分:0)

一种简单的方法是测试字符串是否一个点前面没有字母以排除它:

[^a-z]\.|\A\.

如果模式失败,则字符串有效。