Forum: PC-Programmierung Regular Expression: word boundary mit anderem "word"


von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Hallo allerseits,

ich stehe bei Perl Regular Expressions grad auf dem Schlauch...

Ich möchte prüfen, ob in einem String eine bestimmte Zeichenkombination 
vorkommt, vorher/nachher darf alles sein nur kein a-z. Woran ich 
scheitere ist dass die Kombination auch ganz am Anfang oder ganz am Ende 
vorkommen darf.

Beispiel: ich suche "XXX"
abc-xxx-4711 passt
abc-xxxy-123 passt nicht (wegen dem y)
abc-xxx08156 passt (eine Ziffer nach xxx ist ok)
xxx-4711 passt
abc123-xxx passt

Eigentlich bietet sich ja das \b als "word boundary" an, nur geht das in 
meinem Fall nicht, weil ich in dem Fall ein anderes Verständnis für 
"word" habe als Perl. Für Perl ist \w ein [A-Za-z0-9_], in meinem Fall 
aber nur [A-Za-z]

Ohne "ganz am Anfang" und "ganz am Ende" ists einfach: [^a-z]xxx[^a-z] 
(Groß/Kleinschreibung mal der einfachheit halber weggelassen)

Wie mach ich das?

Vermutlich wäre die Lösung: wie schreibt man \b ohne \b (also quasi "zu 
Fuß") ?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Probier mal das:
1
(^|[^a-z])xxx([^a-z]|$)

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Yalu X. schrieb:
> Probier mal das:
>
>
1
> (^|[^a-z])xxx([^a-z]|$)
2
>

Danke, Funktioniert! Menn mans mal gesehen hat, ist es eh logisch...

ich hab mich total durch diese "zero-width lookaround assertions" 
verwirren lassen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.