2014-06-20 2 views
0

다음 두 가지 유형의 주석이 있습니다. 정규 표현식 \/\*.*\*\/은 두 번째 유형의 주석을 찾지 않지만 첫 번째 주석은 찾지 않습니다. 여러 줄을 가지고 있기 때문에 그런 것 같아요?여러 줄로 된 정규식 검색

두 가지 주석을 모두 찾으려면 정규식에 어떤 수정이 필요합니까?

첫 번째 유형 :

/* Comment type1 */ 

두 번째 유형 :

/* 

* JD-Core Version: 0.7.0.1 

*/ 
+1

어떤 프로그래밍 언어/툴/정규식 엔진을 사용하고 있습니까? '.'의 의미와 그것들을 바꿀 수있는 availble 플래그는 다를 수 있습니다. – Bergi

+0

당신이 사용하는 언어가 무엇인지 말하지 않았기 때문에 유용한 답변의 내용과 형식이 달라질 것입니다. – Bohemian

+0

정규식은 모든 도구에 공통적이라고 생각했습니다.어쨌든 메모장을 사용했습니다. ++ 및 Eclipse IDE –

답변

5

나는 다른 해결책을 제안한다.

+0

그것은 작동합니다. 감사. DEMO 페이지에서 성공적으로 작업하지만 다른 솔루션이 작동하지 않는 이유 정규 표현식의 공통 구문을 사용하지 않습니까? –

+0

"나는 감자 튀김을 사용하여 감자를 피하고 있습니다."라고 말하는 것과 같습니다. '[\ S \ s]'는'.'와 동일하지만, 전자가 닷 (개행)보다 * more *와 실제로 일치한다는 점만 다릅니다. – Doorknob

+0

도트는'[\ S \ s]'보다 자원에 대해 좀 더 탐욕 스럽습니까? ... – zx81

0

도트가 개행 문자와 일치하므로 정규식에 DOTALL 플래그 (들)을 추가하지 않습니다 :

/\/\*.*?\*\//s 

그리고 마지 못해 사용하십시오. 텍스트를 캡처하려면 점 .*?에 대한 정량, */

0

당신의 정규식 sg 수정과 아래 있어야한다

/\/\*.*?\*\//sg 

(즉 물음표를 추가) 그래서 첫 번째 닫기에서 멈출 것이다 의 /* */, 아래 정규식에 대한 이동 내부에 존재했다

/\/\*(.*?)\*\//sg 

설명 :

s # Dotall 
g # global 
*? # Non-greedy match 

DEMO

0

dot .는 항상 줄 바꿈과 일치하지 않습니다. 플래그를 사용하여이를 수정하거나 명시 적 문자 클래스를 사용해 볼 수 있습니다. 여기에 주석 내부의 순서 */하지만 모든 것을 허용하지 않는 버전입니다 :

/\/\*([^\/]|[^*]\/)*\*\// 

(demo는)

3

의견이 중첩 된 경우 언어이 갈 수 있습니다, 확인하지 않습니다 가정 :

(?s)/\*.*?\*/ 

당신은 메모장을 사용한다고 말합니다 + + : 여기 직장에서 정규식의 스크린 샷입니다.

\/\*([\S\s]+?)\*\/ 

이 resouces에 욕심이 점을 피할 수 :

Notepad++ Regex

+0

ntepad ++ 및 Eclipse IDE를 사용하면 reqular expression이 두 도구에서 작동하지 않습니다. –

+0

FYI, 메모장에서 근무하는 정규식의 스크린 샷을 추가했습니다. ++ : – zx81

+1

네 말이 맞아, 내가 실수 한거야. –

관련 문제