Regex 正则表达式以匹配字符串的部分或全部

Regex 正则表达式以匹配字符串的部分或全部,regex,Regex,我根据变量的结果动态创建正则表达式。我已经成功地测试了大部分表达式,但我正在努力处理长度可能不同的部分 如何修改正则表达式(a_)?c(davison)\.nsf?,以便将以下任何字符串归类为匹配字符串 a_cdavis.nsf cdavison.nsf cdaviso.nsf cdavis.nsf 本质上,要将字符串视为匹配,字符串必须满足以下条件- “(a_)?”-可以以“a_”开头,但不必以“a”开头 “c”-必须包含小写字母“c” “(davison)”-我不能做的位-必须包含“da

我根据变量的结果动态创建正则表达式。我已经成功地测试了大部分表达式,但我正在努力处理长度可能不同的部分

如何修改正则表达式
(a_)?c(davison)\.nsf?
,以便将以下任何字符串归类为匹配字符串

  • a_cdavis.nsf
  • cdavison.nsf
  • cdaviso.nsf
  • cdavis.nsf
本质上,要将字符串视为匹配,字符串必须满足以下条件-

  • “(a_)?”-可以以“a_”开头,但不必以“a”开头
  • “c”-必须包含小写字母“c”
  • “(davison)”-我不能做的位-必须包含“davison”的部分或全部,从开头开始(因此“dav”是可以接受的,但“son”不是)
  • “.nsf”-必须以“.nsf”结尾
  • 长度-长度不得超过12个字符,包括字符串开头的可选“_a”和字符串结尾的必需“.nsf”

  • 任何提示和提示都将不胜感激。

    若要使
    davison的每个部分成为可选的,请使用嵌套的可选组(
    (?:…)?
    ),若要设置长度限制,您可以在找到13个字符时,使用锚定在开始处的负前瞻以使匹配失败(因此,
    (?!{13})
    将允许大小为12个或更少字符的字符串):


    请参见

    这是否也与cson.nsf
    匹配?引用:“(所以“dav”是可以接受的,但“son”不是)”我想你需要
    (d(a(v(…)?)?)?
    这不是预期的吗?如果不是,字母应该始终紧跟在一起,
    ^(?。{13})(a_551;)c(d(?:a(?:v(?:i(?:s(?:on?)?)\)。nsf$
    会有所帮助。这取决于语言是什么。在JS中,会的。语言(不是通过选择)是VBA,我现在正在生成正则表达式…我现在要吃午饭了,如果你在VBA代码方面有问题,请告诉我。
    ^(?!.{13})(a_)?c(d(?:a(?:v(?:i(?:s(?:on?)?)?)?)?)?)\.nsf$