Как найти строку, содержащую данные HTML, или нет? Пользователь предоставляет вход через веб-интерфейс, и вполне возможно, что он мог использовать либо простой текст, либо форматирование HTML.Как найти, если String содержит данные html?
ответ
Вы можете использовать регулярные выражения для поиска тегов HTML.
Ах, старая проблема # 2. Том прав, регулярное выражение - самый прямой способ выполнить задание, и, как правило, в Интернете есть много примеров, чтобы помочь вам начать работу. –
@Alex Larzelere: проблема №2? Вы можете объяснить? Это ссылка xkcd («теперь у вас есть две проблемы») или что-то еще? – CPerkins
@Cperkins, это точно. Ol 'проблема № 2, проблема № 1, конечно, это то, что вы пытались сделать изначально. –
В вашем бэк-боб, вы можете попытаться найти HTML-теги, такие как <b>
или <i>
, и т.д ... Вы можете использовать регулярные выражения (медленно) или просто пытаются найти «<>» символов. Это зависит от того, насколько вы уверены, что пользователь использовал html или нет.
Имейте в виду, что пользователь мог бы написать <asdf>
. Если вы хотите быть на 100% уверенным, что используемый html действителен, вам нужно будет использовать сложный html-парсер из какой-либо библиотеки (возможно, TidyHTML?)
Вам нужно получить помощь только по строкам регулярных выражений. Они помогают вам узнать потенциальные теги html. Затем вы можете сравнить внутреннее содержимое с любыми ключевыми словами html. Если он найден, установите предупреждение, чтобы не использовать HTML. Или просто удалите его, если вы чувствуете обратное.
Если вы не хотите, чтобы у пользователя был HTML-код на своем входе, вы можете заменить все символы '<' их эквивалентом в виде HTML, '& lt;' и все '>' с '& gt;' (нет пробелов между & и g)
Я знаю, что это старый вопрос, но я столкнулся с ним и искал что-то более всеобъемлющее, которое могло бы обнаружить такие вещи, как объекты HTML, и игнорировало бы другие виды использования символов < и>. Я придумал следующий класс, который хорошо работает.
Вы можете играть с ним жить в http://ideone.com/HakdHo
Я также загрузил это GitHub с кучей JUnit тестов.
package org.github;
/**
* Detect HTML markup in a string
* This will detect tags or entities
*
* @author [email protected] - David H. Bennett
*
*/
import java.util.regex.Pattern;
public class DetectHtml
{
// adapted from post by Phil Haack and modified to match better
public final static String tagStart=
"\\<\\w+((\\s+\\w+(\\s*\\=\\s*(?:\".*?\"|'.*?'|[^'\"\\>\\s]+))?)+\\s*|\\s*)\\>";
public final static String tagEnd=
"\\</\\w+\\>";
public final static String tagSelfClosing=
"\\<\\w+((\\s+\\w+(\\s*\\=\\s*(?:\".*?\"|'.*?'|[^'\"\\>\\s]+))?)+\\s*|\\s*)/\\>";
public final static String htmlEntity=
"&[a-zA-Z][a-zA-Z0-9]+;";
public final static Pattern htmlPattern=Pattern.compile(
"("+tagStart+".*"+tagEnd+")|("+tagSelfClosing+")|("+htmlEntity+")",
Pattern.DOTALL
);
/**
* Will return true if s contains HTML markup tags or entities.
*
* @param s String to test
* @return true if string contains HTML
*/
public static boolean isHtml(String s) {
boolean ret=false;
if (s != null) {
ret=htmlPattern.matcher(s).find();
}
return ret;
}
}
Я использую регулярное выражение:
[\S\s]*\<html[\S\s]*\>[\S\s]*\<\/html[\S\s]*\>[\S\s]*
Так в JAVA это выглядит следующим образом:
text.matches("[\\S\\s]*\\<html[\\S\\s]*\>[\\S\\s]*\\<\\/html[\\S\\s]*\\>[\S\s]*");
Он должен соответствовать любому правильному (а также некорректному) XML-файлу, который содержит где-то элемент «html». Таким образом, могут быть ложные срабатывания.
Edit:
Так как я писал, что я снял последнюю часть с закрытием элемента HTML, как я нашел некоторые веб-сайты не используют его. (?!) Итак, в случае, если вы предпочитаете ложные срабатывания ложных негативов, я призываю это сделать!
Ниже приведены любые теги.Вы можете также извлекать теги, атрибуты и значения
Pattern pattern = Pattern.compile("<(\\w+)(+.+)*>((.*))</\\1>");
Matcher matcher = pattern.matcher("<as testAttr='5'> TEST</as>");
if (matcher.find()) {
for (int i = 0; i < matcher.groupCount(); i++) {
System.out.println(i + ":" + matcher.group(i));
}
}
- 1. Найти, если столбец MySQL содержит данные?
- 2. JQuery HTML Unterminated String Literal Error Если HTML содержит пробелы
- 3. Как десериализовать текст в String, если он содержит данные JSON?
- 4. Целочисленный столбец содержит данные String
- 5. Java String содержит посторонние данные
- 6. python как найти, если словарь содержит данные из другого словаря
- 7. Обнаружить, если коллекция содержит данные
- 8. Как найти, если массив содержит строку
- 9. Как найти, если массив содержит объект
- 10. Java String to byte [] (String содержит данные объекта)
- 11. Как найти, какой файловый блок содержит данные?
- 12. C# regex check string содержит html
- 13. Очистить ячейки, если содержит данные
- 14. Найти, если Array содержит пользователя
- 15. Найти, если строка содержит слово
- 16. Найти, если таблица содержит пробелы
- 17. Как найти, если строка $ содержит определенные символы
- 18. Как найти, если ячейка содержит подстроку Excel
- 19. Как найти, если dataGrid содержит столбец
- 20. MySQL меняет ROW1, если ROW2 содержит «string»
- 21. Проворная ошибка, если вход String содержит пробел
- 22. Если (arraylist содержит «1» && string содержит «1») ошибка печати
- 23. найти, если один столбец содержит другой столбец
- 24. Найти HTML-тег, который содержит определенный текст
- 25. Список (из String()) содержит String()
- 26. HTML, если данные же
- 27. Получить индекс, если String в ArrayList, если содержит ""
- 28. Как найти два столбца Данные Если, если найти, то третий столбец, чтобы найти данные
- 29. PHP String Содержит Integer
- 30. Как найти, если слово содержит перестановку символов шаблона?
Возможный дубликат [Как проверить, что строка не содержит HTML с помощью C#] (http://stackoverflow.com/questions/204646/how-to- validate-that-a-string-doesnt-содержать-html-using-c-sharp) – nullpointer
OP хочет сделать это на Java, как это дубликат? –