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

Dav*_*ard 2 regex

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

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

  • a_cdavis.nsf
  • cdavison.nsf
  • cdaviso.nsf
  • cdavis.nsf

基本上,要被视为匹配,字符串必须符合以下标准 -

  1. "(一个_)?" - 可以从"a_"开始,但不必
  2. "c" - 必须包含小写字母"c"
  3. "(davison)" - 我不能做的一点 - 必须包含部分或全部"davison",从头开始(所以"dav"是可以接受的,但"儿子"不是)
  4. ".nsf" - 必须以".nsf"结束
  5. 长度 - 长度不超过12个字符,包括字符串开头的可选"_a"和字符串末尾所需的".nsf".

任何提示和技巧将不胜感激.

Wik*_*żew 5

要使每个部分都是davison可选的,使用嵌套的可选组((?:...)?),并设置长度限制,如果找到13个字符,则可以使用在开始时锚定的负前瞻来使匹配失败(因此,(?!.{13})将允许12个字符串以及更少的字符串字符大小):

^(?!.{13})(a_)?c(d(?:a(?:v(?:i(?:s(?:on?)?)?)?)?)?)\.nsf$
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

  • 这不会匹配`cson.nsf`吗?引用:"(所以"dav"是可以接受的,但"儿子"不是)"我认为你需要`(d(a(v(...)?)?)?)? (2认同)