Thread Regex: Suchen innerhalb eines Matches? (8 answers)
Opened by Muffi at 2014-12-17 10:38

payx
 2014-12-17 12:38
#178783 #178783
User since
2006-05-04
564 Artikel
BenutzerIn

user image
Hallo Muffi,

auf der Grundlage von Renees Vorschlag mit lookahead und negative lookahead, was Dein Editor vielleicht nicht kann:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl

use strict;
use warnings;

my $s = <<ENDSTRING;
  TFoo = record
    ...
    no functions here
    ...
  end;
  TFoo = record
    ...
    event01 here
    function Bar(): Integer;
    ...
  end;
  TFoo = record
    ...
    no functions here eventually
    event02 here
    no functions here
    ...
  end;
  TFoo = record
    ...
    function Bas(): Integer;
    event03 here
    ...
  end;
  TFoo = record
    ...
    no functions here
    ...
  end;
  TFoo = record
    ...
    event04 here
    function Bat(): Integer;
    event05 here
    ...
  end;
  TFoo = record
    ...
    no functions here
    ...
  end;
  TFoo = record
    ...
    function Bau(): Integer;
    ...
  end;
  TFoo = record
    ...
    no functions here
    ...
  end;
ENDSTRING

print for $s =~ m{ (record (?:[^e]|\we|\be(?!nd;))+? function \s+ \w+\(\) .+? end; \s*) }xmsg;

HTH
Grüße
payx

EDIT: \b vor e(?!nd;\b) entfernt, weil sonst keine anderen e im Block stehen dürften. (Damit tritt aber das von clms genannte Problem wieder auf.)

EDIT 02: Jetzt wieder mit \b und etwas vereinfacht. Das sollte passen.
Last edited: 2014-12-17 14:05:44 +0100 (CET)

View full thread Regex: Suchen innerhalb eines Matches?