Показать сообщение отдельно
  #21  
Старый 16.11.2012, 08:16
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

повторяющаяся тема, в целях обучения все способы хороши, даже посимвольный пробег по строке; самый краткий без регулярок, это функция, которая два раза вызывает delete; а для разнообразия можно сделать регулярками через CreateOLEObject
Код:
uses comobj;

function eval(command:string; lang:string='VBScript'): string;
var
  script: Variant;
begin
  script := CreateOLEObject('ScriptControl');
  try
    script.Language := lang;
    result := script.eval(command); // no match => error
  finally
    script := Unassigned;
  end;
end;

function match(given, regexp: string; index:integer=0): string;
const script = '"%s".match(%s)[%d];';
begin
  given := StringReplace(given, '\', '\\', [rfReplaceAll]);
  given := StringReplace(given, '"', '\"', [rfReplaceAll]);
  given := StringReplace(given, #13#10, '\n', [rfReplaceAll]);
  result := eval(format(script, [given, regexp, index]), 'JScript');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  ShowMessage('full:'#13#10+ match(given.Text, '/<a href="#nodo".*?>(.+)<\/a>/'));
  ShowMessage('inner:'#13#10+ match(given.Text, '/<a href="#nodo".*?>(.+)<\/a>/', 1));
  ShowMessage('other:'#13#10+ match(given.Text,'/<a href="#nodo"(.*?)>.+<\/a>/', 1));
end;
__________________
>woweook<
Ответить с цитированием