(Весь приведенный ниже код был сгенерирован Regex Buddy ; я также использовал его для создания используемого регулярного выражения. SubjectString
- это содержимое вашего исходного файла, загруженное в строку; вы можете загрузить исходный файл в список строк, например, и передать Text
.)
Используя TPerlRegex
, доступный на сайте RegEx Buddy , вы можете использовать
var
Regex: TPerlRegEx;
begin
...
Regex := TPerlRegEx.Create(nil);
Regex.RegEx := 'lang\((.*)\)';
Regex.Options := [preMultiLine];
Regex.Subject := SubjectString;
if Regex.Match then
begin
repeat
// matched text: Regex.MatchedExpression;
// match start: Regex.MatchedExpressionOffset;
// match length: Regex.MatchedExpressionLength;
// backreference n text: Regex.SubExpressions[n];
// backreference n start: Regex.SubExpressionOffsets[n];
// backreference n length: Regex.SubExpressionLengths[n];
until not Regex.MatchAgain;
end;
end;
Используя поддержку регулярных выражений Delphi XE (use Regex
), вы можете использовать
var
Regex: TRegEx;
MatchResults: TMatch;
begin
...
try
Regex := TRegEx.Create('lang\((.*)\)', [roMultiLine]);
MatchResults := Regex.Match(SubjectString);
while MatchResults.Success do begin
MatchResults := MatchResults.NextMatch();
end;
except
on E: ERegularExpressionError do
begin
// Syntax error in the regular expression
end;
end;
end;
В обоих случаях нужный вам текст (часть в скобках) будет находиться в группе захвата 1 каждого совпадения.
Кажется, я вспоминаю из других вопросов, что вы используете Delphi 7, поэтому первый, вероятно, будет лучшим вариантом.