Czy istnieje wyrażenie regularne, które może całkowicie usunąć znacznik HTML? Przy okazji, używam Java.Jak usunąć znacznik HTML w Javie
Odpowiedz
Zamiast tego należy użyć parsera HTML. Podoba mi się htmlCleaner, ponieważ daje mi to dość wydrukowaną wersję HTML.
Z htmlCleaner można zrobić:
TagNode root = htmlCleaner.clean(stream);
Object[] found = root.evaluateXPath("//div[id='something']");
if(found.length > 0 && found instanceof TagNode) {
((TagNode)found[0]).removeFromTree();
}
Dzięki za skierowanie mnie do htmlCleaner :) – exhuma
Czy potrzebujemy uzyskać jakąkolwiek bibliotekę w celu użycia powyższego kodu? I root.evaluateXPath ("// div [id = 'something']"); w tym "czymś" może być każdy idit? proszę daj mi znać. dzięki –
nr Wyrażenia regularne nie mogą z definicji parsowania HTML.
Możesz użyć wyrażeń regularnych do s/<[^>]*\>//
lub czegoś naiwnego, ale będzie to niewystarczające, szczególnie jeśli chcesz usunąć zawartość tagów.
Jak powiedział inny plakat, użyj rzeczywistego parsera HTML.
Jeśli wystarczy usunąć tagi następnie można użyć tego wyrażenia regularnego:
content = content.replaceAll("<[^>]+>", "");
usunie tylko tagów HTML, ale nie innych rzeczy. Dla bardziej złożonych rzeczy powinieneś użyć parsera.
EDIT: Aby uniknąć problemów z HTML komentarze można wykonać następujące czynności:
content = content.replaceAll("<!--.*?-->", "").replaceAll("<[^>]+>", "");
Ponieważ nie używasz żadnych znaków mięsa '.','^'i' $ ', flagi' s'- i 'm' można pominąć. –
To wyrażenie może powodować zniekształcenie, jeśli HTML zawiera komentarze XML z osadzonymi znakami "<' or '>". –
Alternatywnie, jeśli zamiarem jest wyświetlaczu wejściowe użytkownika sterowany z powrotem do klienta, a następnie można również po prostu wymień wszystkie <
przez <
i wszystkie >
przez >
. W ten sposób HTML nie zostanie zinterpretowany jako "jest" przez aplikację klienta (przeglądarkę internetową).
Jeśli używasz JSP jako technologii wyświetlania, możesz użyć do tego JSTL c:out
. Unika domyślnie wszystkich jednostek HTML. Na przykład:
<c:out value="<script>alert('XSS');</script>" />
NIE wyświetli alertu, ale po prostu pokazuje rzeczywisty ciąg bez zmian.
można użyć tego prostego kodu, aby usunąć wszystkie znaczniki HTML ...
htmlString.replaceAll("\\<.*?\\>", ""))
Spowoduje to tylko usunięcie znaczników otwierających i pozostawienie tagów zamykających nieobsługiwanych. – jlordo
Nigdy nie wykonywałbym takiej pracy samemu - parsowanie html na zwykły tekst jest naprawdę pracowitą koleją. – jebbie
To zadziałało, ale może zależy od złożoności tagów, komentarzy, skryptów itp. Tak więc, dla złożonego przypadku może być lepiej biblioteka HTML. – jmoran
Jest JSoup który jest biblioteką Java wykonane do manipulacji HTML. Spójrz na metodę clean()
i obiekt WhiteList
. Łatwe w użyciu rozwiązanie!
WOW, sir, naprawdę zrobiłem mój dzień, lubię to, TAK! Markdownj, Markdown4J, htmlCleaner .. wszystkie z nich są ***** przepraszam .. JSoup to jedyny sposób, w którym naprawdę osiąga się to dzięki jednemu liniowemu: String plain = new HtmlToPlainText(). GetPlainText (Jsoup.parse (html)); – jebbie
Krótszy kod to 'String tekstowy = Jsoup.parse (html) .text();' – jrarama
@jrarama - Wcale. 'Jsoup.parse (html) .text()' usuwa wszystkie znaczniki i białe znaki, pozostawiając tylko długi wiersz tekstu, podczas gdy 'new HtmlToPlainText(). GetPlainText (Jsoup.parse (html))' formatuje tekst w uproszczony sposób, zachowując podział na wiersze, akapity, punkty wypunktowania itp. – isapir
Nie potrzebujesz żadnego analizatora HTML. Poniższy kod usuwa wszystkie komentarze HTML:
htmlString = htmlString.replaceAll("(?s)<!--.*?-->", "");
- 1. Jak usunąć znacznik HTML za pomocą PHPQuery?
- 2. Jak mogę usunąć zdalny znacznik w eGit?
- 3. Jak usunąć znacznik w repozytorium GitLab
- 4. Znacznik przycisku HTML
- 5. Znacznik HTML dla DASH
- 6. Znacznik wideo HTML Safari
- 7. Znacznik HTML rel:
- 8. Znacznik pobierania html
- 9. Jak mogę usunąć atrybuty ze znacznika html?
- 10. Jak usunąć znacznik z mapy ulotek
- 11. Jak usunąć konkretny obiekt listy w Javie?
- 12. Jak usunąć warstwę modułów w Javie 9?
- 13. Znacznik HTML zapobiegający uruchamianiu znaczników HTML?
- 14. jak wstawić znacznik html wewnątrz sql w migracji Liquibase?
- 15. Jak uciec znaki specjalne HTML w Javie?
- 16. Yii2 jak mapować znacznik zakotwiczenia HTML na znacznik yii2 html :: a()
- 17. znacznik zajmujący dodatkowe miejsce w html
- 18. Jak usunąć znaki specjalne html?
- 19. Zbłąkany znacznik początkowy HTML w walidatorze?
- 20. Backbone js: Jak usunąć dodatkowy znacznik w widoku?
- 21. HTML, jak usunąć tekst w polu FileUpload?
- 22. Jak usunąć przekierowanie html w devise authenticate_user
- 23. Jak zastąpić znacznik HTML innym znacznikiem w jquery?
- 24. HTML 5 Znacznik audio wiele plików
- 25. usunąć wszystkie znaki specjalne w Javie
- 26. Usunąć pojedynczy znacznik zaznaczenia osi X w ggplot2 w R?
- 27. przeglądarka HTML w Javie aplikacja oparta
- 28. Jak usunąć niestandardowy znacznik javadoc z Intellij-IDEA
- 29. Regex - Konwertuj HTML na prawidłowy znacznik XML
- 30. znacznik html z "x" zamiast tradycyjnego znacznika
wpisując swój tytuł w polu wyszukiwania, mam następujące: http://stackoverflow.com/search?q=How+to+remove+HTML+tag + w + Java ... czy nie dostałeś tego samego, kiedy publikowałeś pytanie? – kdgregory
Nie znalazłem żadnych duplikatów. Te pytania dotyczą ekstrakcji tekstu z HTML: http://stackoverflow.com/questions/240546/removing-html-from-a-java-string http: // stackoverflow.com/questions/832620/stripping-html-tags-in-java – tangens