2017-12-18 4 views
2

정규식을 사용하여 문자열 내에서 주석 처리 된 줄을 찾고 싶습니다. 다음과 같은 시도했지만 첫 번째 후 모든 것을 제공합니다 //.줄 끝까지의 정규식

왜?

program Project1; 

uses 
    RegularExpressions; 

var 
    Text: string; 
    Pattern: string; 
    RegEx: TRegEx; 
    Match: TMatch; 
begin 
    Text := 'Hello' + #13#10 
    + '// Test' + #13#10 
    + 'Text' + #13#10; 

    Pattern := '//[^$]*$'; 

    RegEx := TRegEx.Create(Pattern, [roCompiled, roMultiLine]); 
    Match := RegEx.Match(Text); 
    if (Match.Success) then 
    begin 
    Match.Index; // 8 -> Expected 
    Match.Length; // 15 -> I would like to have 9 
    end; 
end. 
+0

패턴의 시작 부분에서 줄 바꿈시'(? m)'과 일치하도록 지정할 수 있습니다. –

+1

우리의 답변으로 귀하의 문제가 해결 되었습니까? – Allan

+0

도움이 될만한 것이 있다고 생각되면 답변 아래의 의견을 통해 알려주십시오. –

답변

1

당신은 당신의 정규식에서 다음 구문을 사용하지 않아야 [^$]*

이 무엇 전체를 취할 당신의 정규식 원인 (EOL 문자를 포함) 0 N 시간에 달러 $ 아닌 모든 문자를 복용 의미를 끈. 대신 정규식

사용 :

Pattern := '//[^\r\n]*' 

행운을 빕니다!

1

당신은 당신이 행의 끝을 지정할 필요가 없기 때문에, .* 실질적으로 모든 라인을 matcing, 줄 바꿈 이외의 0+ 문자와 일치합니다 당신은 심지어 roMultiLine 옵션을 제거 할 수 있습니다

Pattern := '//.*'; 

를 사용할 필요가 현재 위치에서 끝납니다 (여기, // 이후).