" It's big \"problem "
정규식을 사용 하여 하위 문자열 을 어떻게 얻 습니까?
s = ' function(){ return " It\'s big \"problem "; }';
답변
/"(?:[^"\\]|\\.)*"/
Regex Coach 및 PCRE Workbench에서 작동합니다.
자바 스크립트 테스트 예 :
var s = ' function(){ return " Is big \\"problem\\", \\no? "; }';
var m = s.match(/"(?:[^"\\]|\\.)*"/);
if (m != null)
alert(m);
답변
이것은 많은 리눅스 배포판에서 사용 가능한 nanorc.sample에서 가져온 것입니다. C 스타일 문자열의 구문 강조 표시에 사용됩니다.
\"(\\.|[^\"])*\"
답변
ePharaoh가 제공 한대로 대답은
/"([^"\\]*(\\.[^"\\]*)*)"/
위의 내용을 작은 따옴표 또는 큰 따옴표 문자열에 적용하려면 다음을 사용하십시오.
/"([^"\\]*(\\.[^"\\]*)*)"|\'([^\'\\]*(\\.[^\'\\]*)*)\'/
답변
여기에 제공된 대부분의 솔루션은 대체 반복 경로, 즉 (A | B) *를 사용합니다.
일부 패턴 컴파일러가 재귀를 사용하여이를 구현하기 때문에 큰 입력에서 스택 오버플로가 발생할 수 있습니다.
예를 들어 Java : http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6337993
다음과 같은 것 :
"(?:[^"\\]*(?:\\.)?)*"
, 또는 Guy Bedford에서 제공하는 것은 대부분의 스택 오버플로를 방지하는 구문 분석 단계의 양을 줄입니다.
답변
"(?:\\"|.)*?"
번갈아 가며 \"
와 .
탈출 따옴표를 통해 통과하면 게으른 정량의 동안 *?
당신은 인용 문자열의 끝을지나 가지 않도록합니다. .NET Framework RE 클래스에서 작동
답변
/"(?:[^"\\]++|\\.)*+"/
man perlre
Perl 5.22.0이 설치된 Linux 시스템 에서 직접 가져 옵니다. 최적화,이 정규식은 모두의 ‘posessive’형식을 사용 +
하고 *
이 닫는 따옴표가없는 문자열이 어떤 경우에 일치하지 않을 것이라고 사전에 알려져을 위해, 역 추적을 방지 할 수 있습니다.
답변
/(["\']).*?(?<!\\)(\\\\)*\1/is
인용 된 문자열과 함께 작동해야합니다.
