2017-10-05 95 views
0

我想写一个匹配{^xyz^}为波纹管的模式,正则表达式与{^和^}

@"\b\{\^\S*\^\}\b 

但我没有得到成功,想知道什么是我的模式问题。

+0

因为我想获取{^和^}之间的字符串....例如,如果字符串是{^ fristname ^} ...我想获得'firstname'。 – dula

+0

您使用哪些工具进行匹配(原因是您需要转义'\\')?有你的报价面前! – kaza

+0

对不起,我想突出显示名字,这就是为什么我在我的回复中放置单引号的原因 – dula

回答

1

您可以使用:

@"\{\^([^}]*)\^\}" 

,并提取捕获组#1的字符串。

  • 使用捕获的组获取想要从较大匹配中提取的子字符串。
  • 由于{}是非单词字符,因此字边界或\b将无法​​在此处工作。
  • 否定字符类别[^}]*的使用比贪婪\S*更有效和准确。
+0

不确定它是否是可能的字符串,但是你的正则表达式不匹配^ {}内的{^ curly {brace}。 – Andrew

+0

请参阅我们总是可以发明一个输入,这会导致给定正则表达式的问题,但关键在于它是否为每个OP或现在的有效输入。 – anubhava

+0

问题是你认为不会在该字符串中关闭大括号,我不知道为什么。 ;) – Andrew

0

我只是简单地使用\{\^(\S*?)\^\}。这样您就可以捕获插入符号和花括号之间的内容。 ?是为了使*量词延迟,因此它尽可能少地匹配字符(为了防止将一个块的开始匹配到同一行中另一个块的结尾)。

与那些\b你需要在正则表达式的大括号之前和之后匹配一个字型字符。这真的是一个要求吗?或者可以有空间吗?