RegExMatch Teilmuster Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

RegExMatch Teilmuster

25 Sep 2018, 14:50

Hi,
Wie kann ich mit RegExmatch ausdrücken, dass es nach ersten treffer aufhören soll zu suchen.

Code: Select all

erg = <name locale="de">Perle</name><color locale="de">Blau(Schwarz)</color><name locale="de">Butter (Margarine)</name><color locale="de">Grau(Silber)</color><name locale="de">Öl (Fett)</name>
RegExMatch(erg, "<name locale=""de"">(.*)<\/name>", gis)
MsgBox, % gis1
nach ersten </name> soll es den Teilmuster in Variablen gis speichern.
User avatar
TheDewd
Posts: 1510
Joined: 19 Dec 2013, 11:16
Location: USA

Re: RegExMatch Teilmuster  Topic is solved

25 Sep 2018, 14:56

(.*) --> (.*?)

Code: Select all

RegExMatch(erg, "<name locale=""de"">(.*?)<\/name>", gis)
Find all matches:

Code: Select all

#SingleInstance, Force

erg = <name locale="de">Perle</name><color locale="de">Blau(Schwarz)</color><name locale="de">Butter (Margarine)</name><color locale="de">Grau(Silber)</color><name locale="de">Öl (Fett)</name>

Pos := 1

While (Pos := RegExMatch(erg, "<name locale=""de"">(.*?)<\/name>", M, Pos + StrLen(M))) {
	gis%A_Index% := M1
}

MsgBox, % gis1
MsgBox, % gis2
MsgBox, % gis3
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: RegExMatch Teilmuster

25 Sep 2018, 15:49

Danke, es funktioniert super, aber verstehen tue ich es nicht. ? macht voranstehende Element optional, also inwiefern sorgt (.*?) dafür, dass es beim ersten Treffer aufhört zu suchen.
User avatar
TheDewd
Posts: 1510
Joined: 19 Dec 2013, 11:16
Location: USA

Re: RegExMatch Teilmuster

25 Sep 2018, 15:58

KHA wrote:Danke, es funktioniert super, aber verstehen tue ich es nicht. ? macht voranstehende Element optional, also inwiefern sorgt (.*?) dafür, dass es beim ersten Treffer aufhört zu suchen.
* Quantifier — Trifft zwischen zero und unlimited mal, so viele Male wie möglich, Wiedergabe wie nötig (greedy)

*? Quantifier — Trifft zwischen zero und unlimited mal, so wenige Male wie möglich, ausweiten wie nötig (lazy)
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: RegExMatch Teilmuster

25 Sep 2018, 16:44

Dankeschön für die Aufklärung
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: RegExMatch Teilmuster

26 Sep 2018, 01:16

RegEx-Kurzübersicht:
Greed (Gier): Standardmäßig versuchen die Quantoren *, ?, +, und {min,max}, so viele Zeichen wie möglich einzubeziehen, um eine Übereinstimmung zu finden. Um dieses Verhalten auf so wenig Zeichen wie möglich zu begrenzen, muss nach den Quantoren ein Fragezeichen eingefügt werden. Zum Beispiel würde das Suchmuster <.+> (also ohne Fragezeichen) bedeuten: "suche nach einer Zeichenkette, die sich zusammensetzt aus <, mindestens einem Zeichen und >". Um zu verhindern, dass das Suchmuster mit der kompletten Zeichenkette <em>text</em> übereinstimmt, ist es notwendig, nach dem Pluszeichen ein Fragezeichen einzufügen: <.+?>. Die Suche stoppt bereits beim ersten '>' und führt dazu, dass das erste HTML-Tag <em> die gefundene Übereinstimmung ist.
Alternativ kannst Du auch die Option U nutzen, wenn sich der gesamte Suchbegriff 'ungierig' verhalten soll:

Code: Select all

RegExMatch(erg, "U)<name locale=""de"">(.*)</name>", gis)
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: RegExMatch Teilmuster

26 Sep 2018, 10:47

Danke für die Ergänzung.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 57 guests