• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

[PHP] Regex optionaler Match

Slashwalker

Winterbanana
Registriert
15.05.06
Beiträge
2.213
Hallo ATler,
ich muss in einem ganzen Haufen Dateien Links umschreiben. Dreamweaver kann ja zum Glück Regex. Daher habe ich mich an einer Expression versucht:
Code:
(http://www\.example\.lan/)+(index\.cfm\?contentid=)+([0-9]{1,2})+?(&noblock)
Problem nur, &noblock soll optional sein. Es sollen also alle Links gefunden werden, http://www.example.lan/index.cfm?contentid=123 und http://www.example.lan/index.cfm?contentid=456&noblock

Obige Regex findet aber nur die mit &noblock am Ende. Dachte das ? sagt das der rest optional ist?
 
Multiplikatoren (+, * oder ?) stehen immer *hinter* dem Ausdruck, der ggf. in Klammern zu setzen ist:

"a+b?" matcht z.B. eine Folge von mindestens einem a gefolgt von beliebig vielen weiteren as und maximal einem b.

"Hallo( Welt)?" oder auch "Hallo(?: Welt)?" matcht "Hallo" und "Hallo Welt". Der Unterschied ist, dass "( Welt)" eine Capturing Group ist, während "(?: Welt)" eine Non-Capturing Group ist.

Zwei Empfehlungen von meiner Seite:
Tutorial und Referenz: http://www.regular-expressions.info/
Testen von RegExes: http://gskinner.com/RegExr/
 
  • Like
Reaktionen: Slashwalker
Na dann werd ich mich mal bei Gelegenheit einlesen. Für's erste reicht mir:
Code:
(http://www\.example\.lan/)+(index\.cfm\?contentid=)+([0-9]{1,2})+(&noblock)?