0

我有以下我正在使用的字符串

Ihwgiuwgdv {str{anything incl symb} chr{anything inc. symb} } blah blah

使用 regex_search 和 regex_match 我正在寻找从第一个大括号到结束大括号的字符串。

我努力了

regex("\{[ ]*(str|chr)[ ]*\{(.)*\}[ ]*(str|chr)[ ]*\{(.)*\}[ ]*\}");

注意: chr 和 str 可以交换位置,但不能同时交换位置。可以有尽可能多的空格。不能使用 boost 我正在使用 c++11。这个正则表达式(除了 (.)*)适用于我们,但不能让整个事情适用于 c++

4

1 回答 1

0

因为正则表达式旨在匹配正则语法。 这不是严格意义上的常规语法。简单地使用正则表达式是不可能的。您可以使其工作,但只能通过费力地指定两种完整的可能性(str 的版本然后 chr 和其他方式)。或者使用快捷方式来确保两者都\bstr\b存在\bchr\b于字符串中,并希望内大括号内的任何内容都不会触发误报。

或者你可以为此编写一个解析器。我会建议。这看起来有点像 JSON,你可以简单地重写现有的 JSON 解析器,它们并不复杂。

于 2013-07-06T03:35:51.520 回答