Ankerpunkte mittels Regex auslesen

Ich bin gerade dabei die Namen von Ankerpunkten auszulesen. Der HTML Code kommt aus einer DB.
Leider steh ich mit Regex noch etwas auf Kriegsfuß.

Mittlerweile bin ich soweit das ich bei der Regex keine Fehlermeldung mehr bekomme ;).
PHP:
preg_match_all('/^<a name="([A-Za-z0-9]+)"$/', $inhalt, $ergebnis);

Leider wird nichts gefunden. Ich steh mittlerweile leider an.
Wäre toll wenn mir jemand sagen könnte was ich hier falsch mache.
 
Probier mal folgenden perl-kompatiblen regulären Ausdruck:
Code:
/<(?:a[^>]+name|[^>]+\s+id)="([A-Z][A-Z0-9-_:.]+)"/i
 
Warum probiert ihr nicht erstmal mit einfachen Suchpattern, bevor man komplexe Pattern erstellt:
<a\s+name="(.*?)"

Und wenn das geht, dann kann man es ausbauen:
=> <a\s+name=[\"\'](.*?)[\"\']
=> <a\s+name=[\"\'](\w+)[\"\']
=> <a\s+name=[\"\']([^>]+)[\"\'] usw. usw. usw.


Was allerdings ist das ?:
[A-Z][A-Z...........)
 
Deine Suchmuster sind aber nicht sehr präzise. Denn nicht nur dass bei deinem Suchmuster das name-Attribut immer das erste sein muss, sondern auch dass eine beliebige Kombination von Anführungszeichen durchginge.

Das „[A-Z][A-Z0-9-_:.]+“ ist die Beschreibung der für ein name- und id-Token erlaubte Zeichen.


Ich hab in meinem Vorschlag allerdings noch einen Fehler gefunden.
Code:
/<(?:a[^>]+name|[^>]+\s+id)="([A-Z][A-Z0-9-_:.]+)"/i
 
Jojo, so präzise sollten die auch nicht sein :-)

Nur wunder mich dies -> [A-Z][A-Z......]
Da kommt bei mir das selbe wie bei [A-Z0-9-_:.]+ raus.
 
Zurück