2017-01-20 9 views
0

... 정규 표현식을 사용하여 'broken'문자열 또는 적절한 문자열을 일치시킬 수 있습니까? 내가 의미하는 것은 나도 이런 일을 일치시킬 수 있습니다 정규 표현식을 필요로한다는 것입니다

"I am a sentence." 

또는이 같은

...
"I am a sentence. 

(에서 누락 된 인용 부호를 알 두 번째 것의 끝). 내 시도는 지금까지

["](\\.|[^"])*["]* 

입니다. 그러나 작동하지 않습니다. 도와 주셔서 감사합니다!

명확성을 위해 편집 : 저는 C 스타일 문자열과 같은 것으로 의도하고 있습니다. 문자열이 제대로 닫히지 않더라도 문자열과 일치하는 기능을 원합니다.

당신은 같은 패턴 쓸 수
+1

이걸 찾으십니까? [ "^"] * "?" – trincot

+1

따옴표가 누락되었음을 어떻게 알 수 있습니까? 누락 된 따옴표를 나타내는 줄 끝 또는 파일 끝이 있습니까? –

+0

행의 끝은 견적이 종료되었음을 나타냅니다. – user3047641

답변

1

: 유효하지 않은 문자열 만에 일치되도록

  • 그것은 문자열 내에서 개행 문자를 제외 : 두 개의 작은 변화를 가지고

    ["](\\.|[^"\n])*["]? 
    

    을 라인의 끝. (.는 줄 바꿈과 일치하지 않지만, 물론 줄 바꿈이 명시 적으로 부정되지 않는다면 부정 문자 클래스는 않습니다.)

  • 이 인용 옵션이 아닌 임의의 반복 doubke 마감한다.

그러나 오류를 자동으로 무시하려는 유스 케이스는 상상하기 어렵습니다. 그래서 두 가지 규칙을 작성하는 것이 좋습니다 wiuld : 첫 번째 패턴은 (는) 다른 패턴 및 (f) 렉스는 항상 더 이상 경기에가는 것보다 한 번 더 문자와 일치하기 때문에 유효한 문자열과 일치 보장된다

["](\\.|[^"\n])*["] { /* valid string */ } 
["](\\.|[^"\n])*  { /* invalid string */ } 

참고.

또한 (f) lex가 패턴을 컴파일하는 방식 때문에 두 개의 겹치는 규칙을 작성해도 실행 오버 헤드가 발생하지 않습니다. 결과적으로 공통 접두어가 자동으로 제거됩니다.