私は2つの正規表現を持っています。1 つは Python スタイルのコメントに一致し、もう 1 つはファイル パスに一致します。
コメントがファイル パス式と一致するかどうかを確認しようとすると、コメント文字列が 15 文字を超えるとエラーがスローされます。それ以外の場合は、期待どおりに動作します。
この問題が発生しないように正規表現を変更するにはどうすればよいですか
サンプルコード:
#include <string>
#include "boost/regex.hpp"
using namespace std;
using namespace boost;
int main(int argc, char** argv)
{
boost::regex re_comment("\\s*#[^\\r\\n]*");
boost::regex re_path("\"?([A-Za-z]:)?[\\\\/]?(([^(\\\\/:*?\"<>|\\r\\n)]+[\\\\/]?)+)?\\.[\\w]+\"?");
string shortComment = " #comment ";
string longComment = "#123456789012345678901234567890";
string myPath = "C:/this/is.a/path.doc";
regex_match(shortComment,re_comment); //evaluates to true
regex_match(longComment,re_comment); //evaluates to true
regex_match(myPath, re_path); //evaluates to true
regex_match(shortComment, re_path); //evaluates to false
regex.match(longComment, re_path); //throws error
}
これはスローされるエラーです
terminate called after throwing an instance of
'boost::exception_detail::clone_impl<boost::exception_detail
::error_info_injector<std::runtime_error> >'
what(): The complexity of matching the regular expression exceeded predefined
bounds. Try refactoring the regular expression to make each choice made by the
state machine unambiguous. This exception is thrown to prevent "eternal" matches
that take an indefinite period time to locate.