를 토큰 화 I 형식 문자열 토큰 화 다음 코드가 (1 + 2)/((8)) - (100 * 34)C++ 11 정규식 수식
I가 좋겠을 그들이 정규 표현식의 일부가 아닌 연산자 나 문자를 사용하면 오류가 발생합니다. 예 : 사용자가 3^4 또는 x-6을 입력하는 경우
정규식을 무효화 할 수있는 방법이 있습니까? 해당 항목을 검색하면 오류가 발생합니까?
정규 표현식을 개선 할 수 있습니까?
//Using c++11 regex to tokenize input string
//[0-9]+ = 1 or many digits
//Or [\\-\\+\\\\\(\\)\\/\\*] = "-" or "+" or "/" or "*" or "(" or ")"
std::regex e ("[0-9]+|[\\-\\+\\\\\(\\)\\/\\*]");
std::sregex_iterator rend;
std::sregex_iterator a(infixExpression.begin(), infixExpression.end(), e);
queue<string> infixQueue;
while (a!=rend) {
infixQueue.push(a->str());
++a;
}
return infixQueue;
고마워요
당신은 숫자가 아닌 모든 문자, 라운드 브라켓, + 또는 -를 발견"[^0-9()+\\-*/]"
로 C++ 문자열로 정의 검색 식
[^0-9()+\-*/]
를 사용하여 문자열에서 검색을 실행할 수 있습니다
정규 표현식은 중첩 된 괄호처럼 중첩 된 구조에서는 좋지 않습니다. –
@JoachimPileborg 사실, 중첩과 관련이 없기 때문에 * 토큰 화 *는 훌륭합니다. – delnan
토큰 화가 작동하지만, 처리 할 수없는 연산자가 포함 된 토큰 화가 필요하지 않았습니다. 사용자가 3 + 5^6 => '3'+ ''5 ''6 '을 입력했기 때문입니다. –