2012-02-06 13 views
5

Próbuję uzyskać wyrażenie regularne, aby zastąpić wszystkie łącza z ciągu tekstowego dla wartości łącza.Wyrażenie regularne dla znacznika zakotwiczenia z wszystkimi atrybutami

Link może wyglądać jak te:

<a href="http://whatever" id="an_id" rel="a_rel">the link</a> 
<a href="/absolute_url/whatever" id="an_id" rel="a_rel">the link</a> 

Chcę wyrażenie regularne, które pojawia się: the link

Dziękuję,

pozdrowienia.

+0

Powiązane http://stackoverflow.com/questions/238891/regular-expressions-match-all-anchors-with-optional-attributes –

Odpowiedz

16
/<a[^>]*>([^<]+)<\/a>/g 

To dalekie od doskonałości, ale musisz podać więcej przykładów tego, co jest poprawny mecz, a co nie (np co whitespaces?)

+0

Hi Florian innym Przykład: a link a link Lobo

+0

Oto przykład mojego wzoru, używając swoich przykładów: http://regexr.com?2vu1u –

+0

Uwaga: to nie będzie działać dla zagnieżdżonego elemen ts. Regex powinien być niewrażliwy na wielkość liter jako i , oba są ważne. – Kshitij

-1

Coś jak to powinno być wystarczająco

<a.*?>(.*)?</a> 
9
/<a[\s]+([^>]+)>((?:.(?!\<\/a\>))*.)<\/a>/g 

ten jeden będzie pasować do każdego <a ...>...</a> tag w tym te, które poprawnie dopasowanych które zawierają < ani żadnych pełnych znaczniki takie jak:

blah blah <a href="test.html">This line contains an HTML opening < bracket.</a> blah blah 
blah blah <a href="test.html">This line contains <strong>bold</strong> text.</a> blah blah 

Czy uchwycić:

<a href="test.html">This line contains an HTML opening < bracket.</a> 
  • z grup przechwytujących:
    • href="test.html"
    • This line contains an HTML opening < bracket.

i

<a href="test.html">This line contains <strong>bold</strong> text.</a> 
  • grupami rejestracji:
    • href="test.html"
    • This line contains <strong>bold</strong> text.

obejmuje także przechwytywanie grup dla znacznika cechy (takie jak CLA ss = ", href =" ", itp.) i zawierają (co jest między tagiem), które można usunąć, jeśli ich nie potrzebujesz.

Jeśli chcesz uchwycić na wielu liniach dodać „s” przed i po „g” flagi na końcu. Zwróć uwagę, że flaga "s" może nie działać we wszystkich smakach wyrażenia regularnego.

przykład przechwytywania (nie korzystając z „S” flag - nie obsługiwany przez regexr jeszcze): http://regexr.com/39rsv

+1

Masz niezamkniętą strzałę w przód pod koniec. –

+0

Dobry chwyt @BrianLeishman, dzięki! – Jim

+0

jak zmodyfikowałbyś to, aby pokryć 'bla bla yikes'? To właśnie mnie teraz zabija. – Jerry

2

Tylko trochę korekcji z przyjętym odpowiedź. To jest prawidłowe wyrażenie: /<a[^>]*>([^<]+)<\/a>/g. Przedni ukośnik (/) dla zamknięcia znacznika kotwicy </a> nie został zmieniony, więc nie będzie można dopasować.

-1

Try This 100% pracuje

(?i)<a(.*)(")>