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

时间:2016-05-13 10:54:28

标签: regex

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

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

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

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

  1. "(a _)?" - 可以从" a _"开始但不必
  2. " c" - 必须包含小写字母" c"
  3. "(davison)" - 我无法做到的 - 必须包含部分或全部" davison& #34;,从头开始(所以" dav"可以接受,但"儿子"不是)
  4. " .nsf" - 必须以" .nsf"
  5. 结束
  6. 长度 - 长度不超过12个字符,包括可选的" _a"在字符串的开头和所需的" .nsf"在字符串的末尾。
  7. 任何提示和提示都将不胜感激。

1 个答案:

答案 0 :(得分:5)

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

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

请参阅regex demo