2016-07-04 4 views
0

정규식을 사용하여 Java로 프로그램을 작성 중이며 오류가 발생했습니다. 내가 뭘 하려는지는 기본적으로 프로그래밍 언어를 만들고 라인별로 구문을 분석합니다. 내가 잘못 가고있는 곳은 어떤 문자열을 찾으려고 할 때입니다. 문제는 식별자, 문자열, 정수 순으로 식별자를 가져야한다는 것입니다. 그러나 식별자에서 문자열을 찾을 수는 있습니다. 문자열은 주위에 큰 따옴표를 사용하여 정의됩니다. 이 링크로 이동하지 않으려는 경우, 여기 here, 또는 :이 사방에 있기 때문에정규식이 Java의 따옴표 대신 무작위로 일치합니다.

[^"]([^\W][a-zA-Z0-9]+)[^"] 

내가, 내 자바 코드를 표시 할 수 없습니다, 여기에 내가 테스트를 어디, 내 표현 내가 프로그래밍 한 방식대로. 그것은 단지 표현 일뿐입니다.

+3

당신이 프로그래밍 언어를 만든다면, 당신이 그것을 구문 분석 정규식을 사용하지 않으려는 : 여기

"로 둘러싸인 텍스트와 일치하는 Pattern이다. – explv

+0

이 정규식이 무엇을 찾을 지 모르겠습니다. 분명히 해줄 수 있니, 제발? –

+3

프로그래밍 언어를 작성하는 데 도움이되는 도구를 살펴 보길 권합니다. Antlr이 있습니다. 파서를 생성하여 코드 생성 및 의미 분석에 집중할 수 있습니다. [편집자 지원과 함께] 완전한 컴파일러를 생성하는 대신 [Xtext] (https://eclipse.org/Xtext/)가 있습니다.) 나는 그들 중 어느 것도 시도하지 않았다는 것을 말해야합니다. – niceman

답변

1

정확히 일치하는 것을 더 설명 할 수 있다면 도움이 될 것입니다. 예 : 몇 가지 예제 텍스트와 표현이 현재 그들을 위해 출력하는 것을 제공하십시오.

지금은 "으로 둘러싸인 문자열 인 텍스트를 찾으려고합니다. 예를 들어 foofoo"text123"barbar이고 원하는 출력은 text123입니다.

Java에서 정규식을 정의하는 경우 "과 같은 특수 문자를 이스케이프 처리해야합니다.

Pattern pattern = Pattern.compile("[^\"]([^\\W][a-zA-Z0-9]+)[^\"]"); 

당신은 다음 텍스트를 찾기 위해 Matcher 객체와 함께 Pattern 객체를 사용할 수 있습니다 : 여기가 제공 한 정규식을위한 자바 사용 가능한 버전입니다. Pattern의 경우 Java-Doc입니다.

Pattern pattern = Pattern.compile("\"[^\"]*\""); 
+0

나는 여전히'''로 둘러싸여 있지 않은 모든 것을 발견하는 패턴을 찾고 있었지만 여전히 [[^ \ W] [a-zA-Z0-9] +' – mttprvst13

+1

오, 그건 약간 까다 롭습니다. regex beginner. ** negative lookbehind **를 사용해야합니다. 다음은 스 니펫입니다. https://regex101.com/r/cE1xJ8/1 – Zabuza

+0

정말 고마워요. – mttprvst13

관련 문제