2011-07-06 6 views
1

하루 종일 작동하도록 노력했지만, 정규 표현식에별로 좋지 않습니다. 내 경우에는가능한 단어와 일치하는 정규식

올바른 형식의 문자열 보인다

String s = "10 LET D = 4"; 

내가 제대로 포맷 된 것 있는지 확인하기 위해 정규 표현식을 만들려고 해요

있다.

지금 난 그냥

boolean b = s.matches("[0-9]+ GOTO|LET [a-zA-Z] +|= [0-9]+"); 

하고 있어요하지만 내 GOTO에 문제가있는 것을 알고 | LET 일, 나는 종류의 단지를 만들어 때문이다. 그것은 주위에 괄호로 작동하지 않았기 때문에 나는이 시점에서 조금 잃어 버렸습니다. 나는 정규식으로도 가능하려고 노력하고 있는가? 그렇지 않다면 다른 제안이 있습니까?

+0

'5 GOTO D = 3'이 (가) 궁금한가요? 나는이 언어에 대해 몇 가지 가정을하고 있으며 그들이 옳다면 나는 단지 궁금하다. –

답변

3

GOTO 또는 LET의 구문을 허용한다고 가정하면이 용어를 괄호로 묶어 문제를 해결해야합니다.

또한, += 주위에 그룹화 (대괄호)를 추가했습니다. +은 정규식 구문의 일부이므로 충돌을 피하는 빠른 방법입니다.

boolean b = s.matches("[0-9]+ (GOTO|LET) [a-zA-Z] [+=] [0-9]+"); 

참고 :이 더 큰 문법의 일부인 경우, 다음 파서가 더 적합 할 수 있음을 다른 사용자 동의.

2

프로그래밍 언어와 관련하여 정규 표현식이 아닌 파서가 필요할 수 있습니다. 그러나 언어의 규칙이 얼마나 단순한 지에 달려 있습니다. regexpal을 사용하여 정규 표현식을 테스트 할 수 있습니다 (정규식 테스터는 인터넷 검색으로 찾을 수 있습니다).

힌트 : goto와 관련하여 원하는 것은 괄호입니다. 적어도 하나의 공백이있는 한 임의의 양의 공백을 허용하고 싶을 것입니다. "\ s +"로 할 수 있습니다.

+0

+1 파서가 가장 좋을 수도 있습니다. 특히 이것이 더 큰 문법의 일부라면. –

관련 문제