2012-03-14 150 views
1

我已经检查等若干问题,像thisthisthisthisthis,但我似乎无法与我的问题,从任何这些搞清楚。我很可能错过了一些简单的东西,但我不知道是什么。正则表达式匹配的可变长度字符串由前缀和后缀

我有类似下面的字符串: This is some random text{colA}that needs{COLBB} to be matched.

我需要匹配的ABB,但没有别的。的规则如下

  • 的前缀将只{COL(不区分大小写)
  • 后缀将只}
  • 匹配的字符将仅是字母
  • 匹配必须区分不敏感
  • 匹配将仅是1或2个字符
  • 一个字断裂不能之前或前缀/后缀之后被假定

我设法得到这个:(?i:[a-z]{1,2}(?<={col[a-z]{1,2})(?=}))它匹配{colaa}但不{cola}(在{cola}时,它需要返回a返回la的情况下)。我无法弄清楚如何调整这两种不同的匹配情况。

我在.Net工作,非常感谢我在这件事上得到的任何帮助。我感到如此接近,但很遥远!

回答

1

的关键是在向后断言移到模式的开始,所以我们可以指定确切前缀,而不是主张在前缀匹配的部分。所以:

(?i:(?<=\{col)[a-z]{1,2}(?=\})) 
1

试试这个:

(?i:(?<={col)[A-Za-z]{1,2}(?=})) 
  • 整个表达式不区分大小写:(?i: …)
  • 我们断言,这场比赛必须在前面加 “{山坳” 与回顾后:(?<={col)
  • 我们匹配任何一个对任何情况下的两封信:[A-Za-z]{1,2}
  • 我们断言该匹配后面必须跟一个“}”,前面是:(?=})
+0

由于我们匹配大小写不敏感,所以[A-Za-z]可以是[a-z]。 – cjbarth 2012-03-14 01:39:49

相关问题