Wyrażenie regularne

Nigdy nie byłem dobry w wyrażeniach regularnych, więc zwracam się o pomoc :slight_smile:

Mam obecnie takie wyrażenie:

/http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)(\-*\w*)(&(amp;)?[\w\?=]*)?/

Które wybiera mi identyfikator z YouTube. I teraz łapie mi tak:

1bHnDd-XgITY
1bHnDdXgITY
-1bHnDd-XgITY

Dwa ostatnie mi łapie, pierwszego nie. A pierwszy jest poprawnym identyfikatorem. Wiem, że problem jest tutaj: (-\w)

To mi pozwala mieć myślnik i ileś tam liter. Niestety, nie wiem jak to zmienić, by łapało mi też myślniki wewnątrz samego tekstu. Póki co mam „brudne” rozwiązanie typu: (-\w-\w-\w-\w-\w-\w-\w) ale to jest zupełnie bez sensu, po za faktem, że działa :wink:

Ktoś wie, jak ten fragment poprawić? Myślnik jak się okazuje, może być w środku, jak i na końcu całości. Końcowy wiem, jak zrobić ale nie wiem co ze środkiem.

Chyba sam sobie odpowiem, bo właśnie mnie olśniło…
Czy wystarczy zrobić coś takiego: code[/code]
? Wygląda, że działa poprawnie. Tylko, czy rozwiązanie jest eleganckie? :wink:

([-\w]*)

??

Hm. Jak sprawdzam na rubular.com moje rozwiązanie, potem Twoje, to:

[code]Źródło: http://www.youtube.com/watch?v=ElXTywiTam8&feature=player_embedded

Moje:

  1. ElXTywiTam8
  2. &feature=player_embedded

Twoje:

  1. ElXTywiTam8
  2. &feature=player_embedded
    3.[/code]
    Skąd ta zmiana? Co tak dużo zmienia (…) a […]?
    Proszę tak łopatologicznie wytłumaczyć… :slight_smile: