2009-07-09 75 views
2

我有一个正则表达式来匹配我的字符串中的{和}之间的任何内容。如何匹配正则表达式的内部可能结果

“/{.*}/”

不能再简单。当我有一个多行匹配的行时出现问题。所以,如果我有这样一行:

这是我的{string}里,它没有{}工作正确

正则表达式匹配

{string}里,它没有{}工作

而不是

{string}

我该如何得到它以匹配第一个结果?

回答

11

问号的意思是“非贪婪”

"/{.*?}/" 
+0

我认为这更具可读性。 – mkb 2009-07-09 17:44:56

3

使用字符类,包含除了右括号的一切:

/{[^}]+}/ 
+0

这是比接受的答案更好的习惯。对于更复杂的正则表达式来说,这不会成为灾难性回溯的牺牲品。 http://www.regular-expressions.info/catastrophic.html – 2009-07-09 18:14:18

0

默认行为是贪婪匹配,即第一{去年}。使用懒惰匹配的? 。之后你*,

/{.*?}/ 

甚至而非*使用 “不是一个}”

/{[^}]*}/ 
1

这将单嵌套大括号的工作只有一个深度:{(({.*?})*|.*?)*}

我我不知道如何获得无限的深度,或者甚至可以使用正则表达式。