2017-01-31 2 views
1

Ich versuche Strings zu entsprechen, die entweder wie folgt aussehen:QRegularExpression Asterisk als Charakter entkommen

7;7;52*8  
8;8;62*5  
9;9;55*1  
11;7;52*49  
12;8;62*64  
14;9;54*62 

oder so:

7;7;52  
8;8;62  
9;9;55  
11;7;52  
12;8;62  
14;9;54 

ich den folgenden Code bin mit.

QRegularExpression re("(^\\d+;\\d+;\\d\\d$)|(^\\d+;\\d+;\\d\\d\\*\\d+$)"); 
QRegularExpressionMatch match; 

passend zum ersten Teil funktioniert, aber der zweite scheint am Sternenteil zu brechen.

Der folgende Code wird für die regex Suche in Notepad ++ arbeiten

(^\d+;\d+;\d\d$)|(^\d+;\d+;\d\d\*\d+$) 

Gibt es eine besondere Art und Weise das Sternchen zu entkommen?

+0

Versuchen Sie, * Zeilen * zusammenzufassen? Dann füge '(? M)' am Musteranfang hinzu ('" (? M) (^ \\ d +; \\ d +; \\ d \\ d $) | (^ \ d +; \\ d +; \\ d \\ d \\ * \\ d + $) "'). –

+0

Ihre aktuelle Regex kann geschrieben werden als '"^\\ d +; \\ d +; \\ d \\ d (?: \\ * \\ d +)? $ "', BTW. –

+0

thx Jungs. Beide Lösungen funktionieren – momosxp

Antwort

1

Es scheint, dass Sie die Regex den Anfang und das Ende von Zeilen übereinstimmen müssen. Die einfachste Möglichkeit, die Regex zu reparieren, besteht darin, am Anfang des Patterns den Inline-Modifikator (?m) hinzuzufügen.

Beachten Sie, dass Ihr Muster redundante Teile enthält, können Sie einen regulären Ausdruck mit einem einzigen Zweig verwenden:

"(?m)^\\d+;\\d+;\\d\\d(?:\\*\\d+)?$" 

Einzelheiten:

  • (?m)^ - Anfang einer Zeile
  • \\d+;\\d+; - 1 + Ziffern und ; (2 mal)
  • \\d\\d - zwei Ziffern
  • (?:\\*\\d+)? - eine optionale Sequenz eines * und 1+ digits
  • $ - Ende einer Zeile.