2013-06-10 2 views
1

소스에서 C와 유사한 주석을 추출하고자합니다.사용할 수없는 정규식

(업데이트 된 예)에서 I가 사용

/** 
* base comment 
* (c) SOMEBODY SOMETIME 
* something 
*/ 

///<!-- ------metadata-XML------- --> 
/// <module type="javascript"> A 
///<desc> some desc 
///  </desc> 
(function(a /* param A */) { // programmers comment ... enclosure 
/*! user doc 
this module .... 
* reguired 
..... 
*/ 
var b={}; // programmers in line comment 
// single line comments 

// The cookie spec says up to 4k per cookie, so at ~50 bytes per entry 
// that gives a maximum of around 80 items as a max value for this field 
    b.a=a; 
    var str = " tttt \/\/this is not comment ! tttt " 
    var str2 = " tttt \/\* this is not comment too ! \ 
.............. \*\/ ttt "; 
    global.b = b; 
}(global); 
///</module> 

정규 표현식

^\s*\/\*(.*[\r\n]*)*\*\/ 

문제 정규식 엔진이 정규 표현식 정거장 (처치)이다이다. RegexCouch가 응답하지 않으면 브라우저에서 사용하는 이 무책임한 페이지를 야기합니다.

이 정규 표현식에 어떤 문제가 있습니까? 어떻게 가능합니까, 정규식 엔진은 그것을 해결할 수 없습니까? 사용할 수없는 regexp-es (구문 상 올바른 것 같습니다)가 있습니까?

+1

최종 언어는 무엇입니까? –

+0

1. PHP ... PCRE 지원, 2. 브라우저 또는 NodeJs의 자바 스크립트 ... PCRE없이 – supipd

답변

5

이것을 Catastrophic Backtracking이라고합니다.

^\s*\/\*(.*[\r\n]*)*\*\/ 
     ^^ ^^ 

더 좋은 방법이 될 것입니다 :

/^\s*\/\*.*?\*\//gms 

here in action를 참조하면 중첩는 수량이기 때문에 귀하의 정규식은 많은 가능성을 확인할 수 있습니다.

당신은 .가 줄 바꿈에 맞게 만들기 위해 ^ 그가 행의 시작과 일치하는지 확인하기 위해 m 옵션을 s 옵션이 필요합니다.

.*?은 가능한 한 적은 문자로 매칭됩니다. 당신이 사용할 수있는 PCRE와 같은 정규 표현식을 사용하는 경우이 C-같은 의견 일치

+0

제안 된 정규 표현식은 한 줄로해야하는 것보다 많은 줄을 차지하는 것처럼 보입니다. http://www.regex101.com/r/xK4lT3 –

+0

나는 치명적인 백 트랙킹 만 고치려고했다. 이 정규식에는 다른 문제도 있습니다. – stema

+0

좋아요, 저는 정규 표현식에 대해 다시 한번 살펴보고 제 대답을 다시 작성했습니다. – stema

2
(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*) 

: 당신의 정규식 맛이 원자 그룹을 지원하지 않는 경우

\s*+\/\*(?>[^*]++|\*++(?!\/))*\*\/ 

및 소유 지정자는 다음을 사용하십시오 :

\s*\/\*(?:[^*]+|\*+(?!\/))*\*\/ 
+1

문자열에 포함되어 있지 않으면 \ 012/ – Ven

+0

나를 위해 완벽하게 작동합니다. 많은 감사합니다. – supipd

+0

@suppid 나는 내 편에서 테스트를 받았으며, 나를 위해 잘 작동합니다. 그래서 내가 당신에게 주어졌습니다. 끝 ... – Gangadhar

1

을 위해 작동 할

+0

두 번째 regexp RegexCoach와 브라우저 (Chrome) too – supipd

+0

@stupid : 이상한, 나는 그것이 정규식으로 인한 것인지 모르겠다. 다른 regex 테스터 시도 : http://regex.larsolavtorvik.com/ –

관련 문제