我想,我想修复内存问题已有几个小时了,但我无法理解该问题。
我有一个类StaticTag
和ExtendsTag
,它们是根据std::smatch
(<regex>
)的结果创建的。创建方法StaticTag
始终有效,而创建方法ExtendsTag
则永远无效。唯一的区别是正则表达式始终有效,因为子字符串已匹配。这里的问题甚至是打印一个捕获的组,大多数情况下一直给我一个带有正确字符串后缀的垃圾。这是代码。
执行两种方法find_static_tag
和find_extends_tag
(后者不起作用):
StaticTag static_tag;
if (Regex::find_static_tag(this->_content, static_tag)) {
}
ExtendsTag extends_tag;
if (Regex::find_extends_tag(this->_content, extends_tag)) {
}
下面介绍了两种方法:
bool Regex::find_extends_tag(std::string in, ExtendsTag& tag) {
std::string pattern = "\\{%\\s*extends\\s+\"(\\S+)\"\\s*%\\}";
std::smatch match;
if (Regex::find_first(pattern, in, match)) {
std::cout << match[1] << std::endl;
tag = ExtendsTag(match[1], match.position(), match.length());
return true;
}
return false;
}
bool Regex::find_static_tag(std::string in, StaticTag& tag) {
std::string pattern = "\\{%\\s*static\\s+\"(\\S+)\"\\s*%\\}";
std::smatch match;
if (Regex::find_first(pattern, in, match)) {
std::cout << match[1] << std::endl;
tag = StaticTag(match[1], match.position(), match.length());
return true;
}
return false;
}
它们需要匹配:{% static "style.css" %}
和{% extends "master.html" %}
。
通常我得到的是这样的东西,而不是“ master.html”:�0e.html。
我认为这可能是内存问题,但是我不知道从哪里开始,因为两种方法对我来说看起来是相同的。它与创建StaticTag
和ExtendsTag
的对象无关,它无法通过match[1]
方法打印find_extends_tag
。
编辑:在第二种方法中将static
更改为extends
时,结果是一样的。那么<regex>
出问题了吗?
谢谢您的帮助!
我要解析的文件:
{% extends "master.html" %}
{% block content %}
<p>Hello ios/index.html</p>
<img src="{% static "html-css.png" %}"/>
{% endblock %}
编辑2:
不知道为什么它开始工作。我取出了Regex::find_first(pattern, in, match)
的实现,并将其直接放在find_static_tag
和find_extends_tag
中,它开始正常工作。
以下是find_extends_tag
的实现,该实现始终有效:
bool Regex::find_extends_tag(std::string in, ExtendsTag& tag) {
std::smatch match;
if (std::regex_search(in, match, std::regex("\\{%\\s*extends\\s+\"(\\S+)\"\\s*%\\}"))) {
tag = ExtendsTag(match[1], match.position(), match.length());
return true;
}
return false;
}
不确定这里有什么区别。