2013-03-24 4 views
1

이 표현식 (3 + 2) + 23/12- (43/54)와 같은 자바의 정규 표현식은 사용자가 만들 수있는 것보다 왼쪽 괄호가 생성됩니다. 왼쪽 괄호가 사용자가 오른쪽 괄호를 넣을 수없는 것보다 생성되지 않은 경우. 그리고 왼쪽 괄호가 사용자가 3 번만 오른쪽 괄호를 3 번만 눌러 왼쪽 괄호로 열리는 식을 닫을 수 있습니다.자바 과학적인 계산기 정규 표현식

감사합니다.

+4

Google에서 도와 드릴 수 있도록 몇 가지 코드를 게시해야합니다. 시도한 내용은 무엇입니까? – BackSlash

+0

나는이 문제는 코드가 필요 없다고 생각한다. 왜냐하면 왼쪽 괄호 "("당신이 넣을 수있는 것보다 표현식에있다 ")"한 번 "("3 번 이상 넣을 수있다 ")"3 번 이상 . – Hope

+2

코드가 필요합니다. 직접 해보고 여기에 와서 코드에서 작동하지 않는 것을 알려주려고 했으므로 해결책을 찾는 데 도움을 줄 수 있습니다. – BackSlash

답변

4

간단히 말해서 표준 정규 표현식을 사용할 수 없습니다.

정규 표현식은 regular languages과 일치 할 수 있으며 일치하는 중첩 구조는 a more general typeformal language이어야합니다.

그러나, 아주 쉽게 다른 수단을 사용하여 무엇을해야하는 것입니다

Can regular expressions be used to match nested patterns?를 참조하십시오. 예를 들어, 괄호를 계산하여 문자열을 한 번 반복하면 은 '('이고 -1')'입니다. 마지막에는 카운트가 열려있는 괄호의 수를 알려줍니다. 카운트가 0보다 크면 사용자가 닫는 괄호를 추가하도록 허용합니다. 그렇지 않으면하지 마십시오.

+0

이 문제의 해결 방법은 무엇입니까? 당신은 어떤 아이디어가 링크 등 – Hope

+0

내가 시도 덕분에 – Hope

1

정규식으로 표현할 수있는 것은 아닙니다.

상황에 맞는 문법이 필요합니다.

는 여기를 참조하십시오 :

http://en.wikipedia.org/wiki/Context-free_grammar

는 '잘 형성 괄호 "에서.

+0

어떻게이 문제를 해결할 수 있습니다 – Hope

+0

http://newserverside.blogspot.dk/2012/05/check-eparentheses와 같은 스택을 사용하여 작은 함수를 작성하십시오 -in-string-expression.html 또는 재귀 함수를 작성하십시오. – jcmikkelsen

+0

덕분에 링크가 내 문제를 해결했습니다. 감사합니다. – Hope

0

가장 좋은 대안은 렉서 및 파서를 사용하는 것입니다. Java 세계에서 즐겨 찾기는 ANTLR과 JavaCC입니다.

Backus-Naur Form [BNF]에서 계산기 언어를 모델링하는 것으로 시작하십시오. 그런 다음 선택한 렉서로 번역하고 파서를 사용하여 결과를 처리하십시오.