2017-04-25 3 views
-4

데이터 자체에 포함 된 JSON 데이터에서 큰 따옴표를 찾으라는 요구 사항이 있습니다.문자열에서 텍스트 찾기

는 예 : { "키": "값", "키 1", "발"UE1 "} 발에

이제 큰 따옴표"UE1은 다른 따옴표를 검색하지 될 필요가있다.

어떻게해야할까요?

+0

JSON이 유효하지 않은 것 같습니다. 할 수 있으면이 추한 곳을 벗어나거나 대신 작은 따옴표를 사용하십시오. – Antoine

답변

-1

큰 따옴표에서 데이터를 추출하는 정규식은 (?<=")[^"]*(?="))이됩니다. 괄호는 \1 또는 $1으로 추출 할 수있는 첫 번째 캡처 그룹을 나타냅니다.

그러나 JSON (및 일반적으로 구문 분석 표준)을 파싱하려면 라이브러리를 사용하는 것이 좋습니다. 가장자리 케이스를 커버하지 않는 정규 표현식보다 훨씬 더 읽기 쉽고 이해할 수 있으며 안전 할 것입니다. (여기에 어떤 것이있을 것이라고 말하지 않고 일반적으로 이것을 조언으로 삼으십시오)

예를 들어, Java, Gson은 JSON을 파싱하고 생성하기위한 훌륭한 라이브러리입니다. JavaScript를 사용하는 경우에는 내장 된 JSON -object를 사용하십시오. 이러한 언어를 사용하지 않는다면 다른 좋은 라이브러리도있을 것입니다.

희망이

0

을하는 데 도움이 방법에 대한 : \"([^(?:\"[,}])]*\"[^(?:\"[,}])]*)\"[,}]?

이 정규식은 콜론 뒤에 공백과 하나의 큰 따옴표가오고 두 번째 큰 따옴표 다음에 공백 또는 닫는 중괄호가 오는 텍스트를 찾습니다. 그것들 사이의 텍스트는 무언가 *, 적어도 하나의 따옴표 및 뭔가로 구성되어야합니다 *.

* something은 값을 끝내므로 따옴표 뒤에 쉼표 나 닫는 중괄호가없는 문자 (빈 문자열 포함)를 의미합니다.

예제에 적용하여 (쉼표를 콜론으로 바꾸도록 수정 됨) Val"ue1을 반환합니다.

String json = "{\"Key\": \"Value\", \"Key1\": \"Val\"ue1\"}"; 

Matcher m = Pattern.compile(": \"([^(?:\"[,}])]*\"[^(?:\"[,}])]*)\"[,}]").matcher(json); 

while (m.find()) 
{ 
    System.out.println(m.group(1)); 
}