2017-12-18 107 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

你不應該使用在你的正則表達式的語法如下:[^$]*

這意味着採取有不美元$ 0到N次的所有字符(包括EOL字符)是什麼原因導致你的正則表達式來取整串。

使用該正則表達式,而不是:

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

祝你好運!

1

您需要使用

Pattern := '//.*'; 

你甚至可以刪除roMultiLine的選擇,因爲你並不需要指定行的末尾,.*結果會比換行符其他0+字符,幾乎matcing任何線它從目前的位置結束(這裏是//之後)。