正则表达式正向前瞻子字符串

时间:2010-06-04 13:14:39

标签: regex substring regex-lookarounds

我对正则表达式相当新,我越来越多地使用它们,我越喜欢它们。我正在研究一个必须满足以下条件的正则表达式:

  1. 必须以Alpha字符开头
  2. 在接下来的三个字符中,至少有一个必须是Alpha字符。
  3. 前四个字符后面的任何内容都是自动匹配。
  4. 我目前有以下正则表达式:^[a-zA-Z](?=.*[a-zA-Z]).{1}.*$

    我遇到的问题是我的正向前瞻(?=.*[a-zA-Z]).{1}并不局限于字母字符后面的后三个字符。

    我觉得好像我在这里错过了一个概念。我在这个表达中缺少什么?

    谢谢大家。

4 个答案:

答案 0 :(得分:3)

你前瞻中的.*正在这样做。你应该在这里限制范围,如

^[a-zA-Z](?=.{0,2}[a-zA-Z]).{1}.*$

编辑:如果你想确保字符串中至少有4个字符,你可以使用另一个这样的前瞻:

 ^[a-zA-Z](?=.{3})(?=.{0,2}[a-zA-Z]).{1}.*$

答案 1 :(得分:3)

你想要前瞻什么?为什么不使用

^[a-zA-Z](..[a-zA-Z]|.[a-zA-Z].|[a-zA-Z]..)

并且开心吗?

答案 2 :(得分:1)

您可能需要做一个解决方法。类似的东西:

^[a-z](?=([a-z]..|.[a-z].|..[a-z])).{3}.*
  • 第一个字符[a-z]
  • 正向前瞻,无论是第一个,第二个,还是第三个字符是a-z ([a-z]..|.[a-z].|..[a-z])
  • 其他东西

答案 3 :(得分:0)

将前瞻中的*更改为?以获取m/^[a-zA-Z](?=.?[a-zA-Z]).{1}.*$

如果我理解你的标准,那就会因为贪婪的变化而修复它。

这些正确匹配:

a2a3-match
2aaa-no match
Aaaa-match
a333-no match