2012-05-20 2 views
-1

키보드의 따옴표를 정규식으로 변환하는 간단한 방법이 있습니까? 그렇지만 HTML 엔터티가 보존되어 있는지 확인하십시오. 예를 들어 some "text"을 번역하려고하지만 <span id="blah">은 원하지 않습니다.Java RegExp : 영어의 경우 따옴표 바꾸기 ""(마음 문맥)

감사합니다.

편집 : 당신의

일부는 나 자신을 시도하지 않은 것을 제안했다. 나는 노력했다 - 나는 너에게 영향을 미치지 않는 것을 보여주고 싶지 않았다. 그러나 성공하지 못했습니다 :

string.replace(
    "(?<!\"|\\w|=)\"(?!\\ |\")((?:[^\"]++|\")+?)(?<!\\ |\")\"(?![\"A-Za-z\u00C0-\u02FF\u0370-\u1EFF])()", 
    "“$1”"); 

그러나 나는 HTML 태그에서 이러한 인용문을 번역하지 않을 수 없습니다.

+2

그리고 우리가 원하는 것은 무엇을 시도 했습니까? (http://mattgemmell.com/2008/12/08/what-have-you-tried/).? – RanRag

+1

수정 사항 : 코드를 표시하는 것이 항상 * 더 좋습니다. –

답변

6

HTML이 regular language이 아니기 때문에 정규식을 사용하는 것은 번거로울 수 있습니다. 유즈 케이스는 너무 제한되어 있으므로 (기본적으로 속성 값에 대한 인용 부호는 건너 뛰기 만합니다.) 충분한 노력을 기울여 정규 표현식을 제시 할 수는 있지만 의심 스럽습니다. 속성에서 =" 사이에 어떤 종류의 공백이있을 수 있기 때문에 텍스트처럼 보일 수 있습니다.

안정적으로 수행하려면 을 구문 분석하고 비표준 텍스트 만 처리해야합니다. 파서를 작성할 필요는 없지만, 이미 작성된 몇 가지를 사용할 수 있습니다. JSoup은 특히 잘 알려진 것입니다.

2

DOM에서 텍스트 노드에만 액세스하고 문자열에서 작동하지 않는 경우가 더 쉬울 것입니다. 그러나 당신이 주장하는 경우 : html 태그에 따옴표를 방지

는 부정적 예측을 달성 할 수 있고, 무엇인가 : 위의 다음과 같은 일련의 문자가 (있는 경우 하지 경기를 말한다 어느

(?![^<>]*>) 

당신이 anoth에 의해 "의 간단한 교체해야 할 경우 < 또는 >하지만 어떤을 포함하지 않는 식의 부분은) 다음 HTML 태그의 > (즉, 당신이 처리하는 부분)

뒤에 당신은, 그러나, 한 가지 다른과의 두 번째 견적 처음 견적을 교체해야하는 경우

Pattern p = Pattern.compile("[\"](?![^<>]*>)"); 
Matcher m = p.matcher("<a href=\"foo bar\">\"test\"</a>"); 
String str = m.replaceAll("”"); 

, 그것의 더 : 어 문자,의는 스웨덴어 따옴표의 스타일로, 이것은 쉽게하는 을 가정 해 봅시다 고통, 그리고 나는 그러므로 이것을 당신을위한 운동으로 남겨 둡니다.

+2

실제 텍스트에'> '가 있으면 (물론 연습이 좋지 않더라도 HTML로 처리하는 것이 완벽합니다.)이 작업은 물론 실패합니다. 예를 들어, 문자열을''\"a > b\" ''로 변경하고'''이전의''''는 변경되지 않습니다. 사실 두 종류의 따옴표를 처리하지 않습니다 (반드시 선택 사항이 아닙니다). –

+0

HTML5에서 변경되었지만 예제 문자열이 유효하지 않은 경우 확실하지 않습니다. 예비 '>'는 '>'이어야합니다 .OP 기본 문제가 HTML 태그 내부에서 일치하지 않았습니다.OP의 2 차적 문제는 일치하는 견적을 어느 문자로 교체할지 결정하는 것입니다. OP는이 방법이 아닌 HTML 파서를 사용하는 것이 좋습니다. – beerbajay

+1

@ beerbajay : 아니요, 이것은 변경 사항이 아니며 아니요, 내 예제 문자열은 잘못된 HTML이 아닙니다. '>'는 텍스트에서 완벽하게 유효합니다. 특히 드물지 않습니다. (항상'> '을 사용합니다. 그러나 많은 사람들이 그렇게하지 않으며, 제가 왜 그렇게하는지 정당화 할 수 있는지 확신 할 수 없습니다.) '>'는 태그 안에있을 때만 특별한 의미가 있습니다 (태그를 닫음). HTML4 strict에서도 [validator] (http://validator.w3.org/)를 사용해보십시오. '>'도 속성의 텍스트 내에서 완벽하게 유효하다는 것에주의하십시오 (그러나 정규 표현식에 문제가 있다고 생각하지 않습니다). –