正则表达式用于解析

时间:2012-10-30 23:02:56

标签: objective-c regex nsregularexpression

我正在寻找一个正则表达式来转换像

这样的东西
{test}hello world{/test} and {again}i'm coming back{/again} in hello world i'm coming back. 

我尝试{[^}]+}但是使用此正则表达式,我不能只拥有测试中的内容并再次标记。有没有办法完成这个正则表达式?

1 个答案:

答案 0 :(得分:1)

正确执行此操作通常超出了正则表达式的功能。但是,如果您可以保证这些标记永远不会嵌套,并且您的输入将永远不会包含不表示标记的花括号,那么此正则表达式可以进行匹配:

\{([^}]+)}(.*?)\{/\1}

说明:

\{        # a literal {
(         # capture the tag name
[^}]+)    # everything until the end of the tag (you already had this)
}         # a literal }
(         # capture the tag's value
.*?)      # any characters, but as few as possible to complete the match
          # note that the ? makes the repetition ungreedy, which is important if
          # you have the same tag twice or more in a string
\{        # a literal {
\1        # use the tag's name again (capture no. 1)
}         # a literal }

因此,这使用反向引用\1来确保结束标记包含与开始标记相同的单词。然后,您将在捕获1中找到标记的名称,并在捕获2中找到标记的值/内容。从这里你可以做任何你想做的事情(例如,将值重新组合在一起)。

请注意,如果您希望代码跨越多行,则应使用SINGLELINEDOTALL选项。