2011-10-06 14 views
8

Ho riscontrato problemi con la corrispondenza degli attributi html (in vari tag html) con espressioni regolari. Per farlo, io uso il modello:Regex - Corrispondenza attributo in un codice HTML

myAttr=\"([^']*)\" 

snippet HTML:

<img alt="" src="1-p2.jpg" myAttr="http://example.com" class="alignleft" /> 

seleziona il testo dal myAttr fine /> ma ho bisogno di selezionare il myAttr="..." ("http://example.com")

risposta

16

Hai un apostrofo (') all'interno della classe del tuo personaggio ma desideri un preventivo (").

myAttr=\"([^"]*)\" 

Detto questo, sei davvero shouldn't be parsing HTML with regexes. (Ci scusiamo per il collegamento a che rispondi di nuovo Ci sono altre risposte a questa domanda che sono più della varietà "se sai cosa stai facendo ..." Ma è bene essere a conoscenza.)

Nota che, anche se si limita la vostra regexing per attributi solo si ha un sacco di prendere in considerazione:

  • Fate attenzione a non corrispondere all'interno di commenti.
  • Fare attenzione a non rispettare le sezioni CDATA.
  • Cosa succede se gli attributi sono racchiusi tra virgolette singole anziché virgolette doppie?
  • Cosa succede se gli attributi non hanno virgolette?

Questo è il motivo per cui sono generalmente necessari parser predefiniti.

4

Il * è un quantificatore goloso. Si dovrebbe seguire con un punto interrogativo per renderlo non avido:

myAttr=\"([^']*?)\" 
2

Se si desidera solo il parametro myAttr valore, utilizzare questo:

"myAttr=\"([^\"]+)\"" 
0

si può provare l'uso che

myAttr=\"?[\w:\-]+ ?= ?("[^"]+"|'[^']+'|\w+)\" 
0

< [^>] *>

Basta provare questo ho s questo aiuto per rimuovere tutti i tag

Esempio Qualcosa

+2

Hai letto la domanda? – Toto