2009-12-10 5 views
0

특정 단어가 포함 된 여러 줄 주석과 일치시키려는 경우, findthis을 예로 들어 보겠습니다. 마음에 드는 첫 번째 패턴은 \/\*.*?findthis.*?\*\/ (DOTALL 사용)입니다. 이 패턴의 문제점은 다음과 같은 문자열입니다.특정 단어가 들어있는 메모와 일치합니다.

/* this is a comment */ 
this is some text 
/* this is a findthis comment */ 

은 전체 텍스트와 일치합니다. 기본적으로 더 큰 파일에서 첫 번째 일치는 첫 번째 주석부터 findthis을 포함하는 첫 번째 주석까지의 모든 내용을 포함합니다. 이 문제를 어떻게 방지 할 수 있습니까?

+1

http://stackoverflow.com/questions/1618419/can-you-give-me -examples-of-odd-single-line-comments-in-c/ –

답변

2

글쎄, 당신은 당신이 완전히 소스 코드 토큰 화해야 할 것이다,이 정확히 제대로하기 \/\*([^*]|\*+[^/*])*findthis([^*]|\*+[^/*])*\*+\/하지만 ...

처럼 뭔가 정규식을 변경할 수 있습니다. 그렇지 않으면 당신의 regex는 다른 기괴한 구석의 경우와 같이 문자열 내부의 주석과 같은 내용으로 바보가됩니다.

(미친 정규 표현식의 설명 : ([^*]|\*+[^/*]) 주석의 내부에 약간의 일치하지만 결코 전부 또는 */의 일부와 일치합니다.)

+0

매우 상상력이 풍부한. 감사! – Felix

0

난이 트릭을 수행해야한다고 생각 :

/\/\*.*?findthis.*?\*\//합니다. ? .*?의 부분은 불량을 의미합니다. 이 방법으로 주석에는 * 및/문자가 포함될 수 있지만 */(주석의 끝)은 포함되지 않습니다.

+0

정확히 내가 게시 한 패턴과 같습니다 (시작과 끝에 두 개의 추가 슬래시가 있습니다 - PHP 사용자 일 가능성이 큽니다). 내가 제공 한 예제에서이 패턴을 시도해 보셨습니까? 이거 작동 안 할거야. – Felix

+0

죄송합니다, 나는 옳았습니다. 이상한 것은 작동하지 않습니다. – VDVLeon

관련 문제