Reges und Zeilenumbruch- Brauche Hilfe

S

silentx

Aktives Mitglied
Thread Starter
Dabei seit
30.08.2011
Beiträge
375
Reaktionspunkte
16
Beispieltext
Code:
                       <div class="dealSelect">
                            <img src="//s3-eu-west-1.amazonaws.com/dealini-assets/content/115/deal.jpg" title="Beltastic Gutschein: dein persönlicher Gürtel">
                            
                            <div class="bottomInfo">Beltastic</div>
                            <div id="do-115" class="numberPad">
                                    
                                    <input type="checkbox" name="cards-o" value="115_1" id="co-115_1"  disabled>
                                    <label class="disabled" for="co-115_1" title="Beltastic 01">1</label>

Warum geht folgendes nicht?
Code:
 NSString *lstrPattern = @"(<img src=\"){1}(.)*"; //(*){1,}(class=\"numberPad\">){1}";
    NSRegularExpression *lregFormat = [NSRegularExpression regularExpressionWithPattern:lstrPattern options:0 error:&lerr];
    NSArray *larrFind = [lregFormat matchesInString:lstrHTML options:NSRegularExpressionDotMatchesLineSeparators range:NSMakeRange(0, lstrHTML.length)];

Es sucht anscheinend nicht auf der anderen Zeile bzw. nur eine Zeile lang...?
Resultat =
 
Schade, dass es kein XHTML ist. Dann könntest Du es viel einfacher mit XPath machen

Alex
 
Habe das Gefühl, dass das RegEx vom Xcode/Objective-C nicht wirklich ausgereift ist ?

Beispieltext
Code:
Hallo
asjdlfjalsdj
Du

RegEx-Pattern
Code:
     //NSString *lstrPattern = @"(Hallo)[\n]*(Du)"; // Findet nichts
     //NSString *lstrPattern = @"(Hallo)[\na-z]*(Du)"; // Findet
     //NSString *lstrPattern = @"(Hallo)[\n.]*(Du)"; // Findet nicht, obwohl . = Jeden Charakter steht
     NSString *lstrPattern = @"(Hallo)[\n\w]*(Du)"; // Findet nichts, obwohl \w = word characters

    NSRegularExpression *lregFormat = [NSRegularExpression regularExpressionWithPattern:lstrPattern options:0 error:&lerr];
    NSArray *larrFind = [lregFormat matchesInString:lstrHTML options:0 range:NSMakeRange(0, lstrHTML.length)];
    
    NSLog(@"%d", larrFind.count); // Sehen wieviel er gefunden hat...

Weiss nicht wo ich noch suchen soll, im Internet gibt es auch nichts oder ich suche falsch :confused:
 
s
If set, a "." in a pattern will match a line terminator in the input text. By default, it will not. Note that a carriage-return / line-feed pair in text behave as a single line terminator, and will match a single "." in a regular expression pattern
(https://developer.apple.com/library...ularExpression_Class/Reference/Reference.html)

mal mit

Code:
@"/(Hallo)[\n.]*(Du)/s"

probiert?


PS. Bei Frameworks im Alter von Carbon und Cocoa und deren Verbreitung und Nutzung sind so offensichtliche Bugs eher selten. Da sitzt der Käfer eher ca 30cm vor dem Monitor. ;)
 
@_ebm_
Ja hier hattest du absolut recht, das Problem liegt wirklich 30cm vom Monitor entfernt :)

Folgende Zeile muss angepasst werden (Options), irgendwie zwingend hier nicht bei der Abfrage selber.
Code:
NSRegularExpression *lregFormat = [NSRegularExpression regularExpressionWithPattern:lstrPattern options:NSRegularExpressionDotMatchesLineSeparators  error:&lerr];

Nun habe ich ein weiteres Problem... Er sucht zuviel
Beispieltext
Code:
Hallo abc Du Hallo def Du Hallo ghi Du

RegEx-Code
Code:
(Hallo).*(Du)

So findet er 1ne Übereinstimmung: Hallo abc Du Hallo def Du Hallo ghi Du
Ist mir zwar logisch vom RegEx her, aber wie kann ich machen dass er nach einer Übereinstimmung aufhört?
 
Der RegEx-Code war falsch, in einem anderen Forum hat man mich über die "Hungrigkeit" ;) von Asterisk aufmerksam gemacht .

Es funktioniert mit folgendem RegEx-Code
Code:
(Hallo).*?(Du)

Mit dem Fragezeichen bremst man die Hungrigkeit von Asterisk aus :) Gemäss Deklaration auch ziemlich logisch. Habe in meinem RegEx-Nachschlagebüchlein auch genau diese Erklärung gefunden, natürlich nachträglich. Danke Trotzdem für eure Unterstützung
 
Zurück
Oben Unten