• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

[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)?