2011-05-29 57 views
3

我想匹配大括号括起来的数字,但大括号本身就是转义序列,我希望匹配从最后一个大括号开始,当时它的确有一个奇数。相同字符的转义序列

{0} OK 
{{0} NOT OK 
{{{0} OK 
{{{{0} NOT OK 

我已经先行/后向断言是这样的:

(?<!\{\{) 

但是,这并不符合重复{{{0},我其实不确定wheter这可能不涉及群体和表量来完成。 (如果断言不是匹配的一部分,我希望它)

匹配必须能够发生在字符串中的任何位置。

这是我到目前为止

(?<=^|[^\{]|\{\{)\{(?=\w) 

它到处成功除了这一部分{{{{0}把量词在一对大括号为不会出现任何效果最好的。根据docs,对零宽度正向lookbehind断言的子表达式不应有任何限制,但它不具有所需的效果。

回答

1

使用您的尝试为基础,尝试这个办法:

(?<!\{)\{(?:\{\{)*(?=\w) 

的解释:

  • (?<!\{)确保没有{
  • \{匹配一个{
  • (?:\{\{)*匹配零或更多出现{{(所以总是在总奇数{
  • (?=\w)确保有以下一些单词字符
+0

你不得不重新安排有点为它工作。那部分让我感到惊讶。 – 2011-05-29 14:27:42

+0

@John Leidegren:如果您想知道我使用了'\ {(?:\ {\ {)*'而不是'(?:\ {\ {)* \ {':它们是完全相同的。而'(?...)'只是一个匹配字符串的组未被引用(一个所谓的[无捕获组](http://msdn.microsoft.com/en-us/library/bs2twtah.aspx#noncapturing_group))。 – Gumbo 2011-05-29 14:31:35

+0

但是你将重复从断言中移出。我认为那是让我愚弄的东西。我试图用一个我认为不可能的重复来断言。 – 2011-05-29 18:19:03

相关问题