RegExMatch Teilmuster

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: RegExMatch Teilmuster

Re: RegExMatch Teilmuster

Post by KHA » 26 Sep 2018, 10:47

Danke für die Ergänzung.

Re: RegExMatch Teilmuster

Post by just me » 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)

Re: RegExMatch Teilmuster

Post by KHA » 25 Sep 2018, 16:44

Dankeschön für die Aufklärung

Re: RegExMatch Teilmuster

Post by TheDewd » 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)

Re: RegExMatch Teilmuster

Post by KHA » 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.

Re: RegExMatch Teilmuster

Post by TheDewd » 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

RegExMatch Teilmuster

Post by KHA » 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.

Top