Non si dovrebbe tentare di analizzare HTML con regex. L'HTML non è un linguaggio normale, quindi qualsiasi regex che si presenterà probabilmente fallirà in qualche caso limite esoterico. Si prega di fare riferimento alla risposta seminale a this question per specifiche. Anche se per lo più formattato come uno scherzo, è un ottimo punto.
I seguenti esempi sono Java, ma l'espressione regolare sarà simile - se non identica - per le altre lingue.
String target = someString.replaceAll("<[^>]*>", "");
Assumendo che il non-html non contiene alcun < o> e che la stringa di input è correttamente strutturato.
Se sai che sono un tag specifico - ad esempio si conosce il testo contiene solo <td>
tag, si potrebbe fare qualcosa di simile:
String target = someString.replaceAll("(?i)<td[^>]*>", "");
Edit: Ωmega portato un buon punto in un commento su un altro post che avrebbe comportato la sovrapposizione di più risultati se ci fossero più tag.
Ad esempio, se la stringa di input fosse <td>Something</td><td>Another Thing</td>
, il risultato precedente sarebbe SomethingAnother Thing
.
In una situazione in cui sono attesi più tag, potremmo fare qualcosa di simile:
String target = someString.replaceAll("(?i)<td[^>]*>", " ").replaceAll("\\s+", " ").trim();
Questo sostituisce il codice HTML con un singolo spazio, poi crolla spazi bianchi, e poi taglia le eventuali alle estremità.
fonte
2012-06-27 15:42:25
È la stringa, l'intera stringa e nient'altro che la stringa? In tal caso, che ne dite di '\ d +'? – Ryan
Sto usando qualcosa del genere: '(?:. +? | . +? | <(?:! | /? [A-zA-Z] +). *? /?>)' e sostituendo con "" "'. –
Se stai leggendo questa domanda, *** per favore *** leggi la risposta accettata per il duplicato. Le prime due risposte qui sono entrambe vulnerabili a un input molto semplice. TL; DR: le espressioni regolari non sono utili per rimuovere correttamente i tag HTML. –