正则表达式到行尾

4
我希望使用正则表达式在字符串中查找已注释的行。我尝试了以下代码,但它只返回第一个//之后的内容。为什么会这样呢?
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.

你可以在模式的开头使用 (?m) 来告诉它在换行符处进行匹配。 - Ron Maupin
如果您认为我们可以提供任何帮助,请通过我们答案下方的评论告诉我们。 - Wiktor Stribiżew
2个回答

5

在正则表达式中,不应使用以下语法:[^$]*

这意味着取出所有不是美元符号$的字符,重复0到N次(包括EOL字符),这会导致你的正则表达式匹配整个字符串。

请改用以下正则表达式:

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

祝你好运!


2

您需要使用

Pattern := '//.*';

您甚至可以删除roMultiLine选项,因为您不需要指定行尾,.*将匹配除换行符以外的0个或多个字符,实际上从当前位置(在此处,在//之后)将任何行匹配到其末尾。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接