• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> 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?
 

gKar

Maunzenapfel
Registriert
25.06.08
Beiträge
5.362
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

Slashwalker

Winterbanana
Registriert
15.05.06
Beiträge
2.213
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)?