【问题标题】:Regular Expression for Ignoring specific digits忽略特定数字的正则表达式
【发布时间】:2014-03-05 14:49:42
【问题描述】:

我需要一个正则表达式来选择这些目录中的所有目录

1. 从任何 alpha 开始 2. 后面没有特定的一组数字 3. 后跟一个字母数字字符直到结束

我尝试了以下表达式,但这不起作用

^skk\/[a-zA-Z]*[^1][a-z0-9A-Z]*$"

然而

 ^skk\/[a-zA-Z]*[^1]*$ 

完美运行,但不能解决我的问题。

这里的 skk 是根目录。

示例数据 不应选择 skk/abc123 应该选择 skk/abc321

【问题讨论】:

  • skk/abcdef 怎么样?它应该通过还是不通过?它以 alpha 开头,没有 1 并以字母数字结尾。
  • @jerry 它应该被选中,因为它不包含 1。也许我可以将我的问题改写为字符串中第一个数字不是 1 的所有字符串

标签: regex


【解决方案1】:

在我看来,您正在寻找一个更像是:

^skk\/(?![a-zA-Z]+1)[a-zA-Z]+[A-Za-z0-9]+$

regex101 demo

这样可以确保字母字符后的第一个数字不是 1。

这假设您使用的正则表达式引擎支持负前瞻。

演示网站解释了正则表达式,但如果您希望我详细说明,请告诉我。

【讨论】:

  • 是的,就是这样——我花了太长时间;)
  • @Jerry,感谢您的快速帮助,我的正则表达式引擎不支持负前瞻。但我相信我能走得更远。
【解决方案2】:

在最后一组 [] 之后和 $ 之前添加星号 (*) 或加号 (+)。

  • 星号表示重复先前的模式零到无限次。 (匹配 skk/abc1 和 skk/abc12)
  • Plus 表示重复先前的模式一到无限次。 (匹配 skk/abc12,无法匹配 skk/abc1)

【讨论】:

  • 我认为 OP 需要更改星号为加号
  • 你可能是对的。我阅读并回复了问题的预编辑版本,其中不清楚最后一组之后有一个星号。
  • @Slartibartfast,我很抱歉,没有意识到星号有不同的含义。
猜你喜欢
  • 2014-03-04
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
相关资源
最近更新 更多