Unit-тест написан с использованием библиотеки TestNG 5.10. Как запустить тесты TestNG в Eclipse читайте здесь.
Выражение:
<("[^"]*"|'[^']*'|[^'">])*>
Комментарий:
< # тег начинается с открывающей угловой скобки "<" ( # начало первой группы "[^"]*" # допускается строка, заключенная в двойные кавычки - "string" | # или '[^']*' # или строка, заключенная в одинарные - 'string' | # или [^'">] # не может содержать одну одинарную кавычку, двойную и закрывающий тег ">" ) # конец первой группы * # 0 или более > # тег заканчивается закрывающей угловой скобкой ">"
Пример на Java:
package ru.topcode.skillbase.regexp; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HTMLTagValidator { private Pattern pattern; private Matcher matcher; private static final String HTML_TAG_PATTERN = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>"; public HTMLTagValidator() { pattern = Pattern.compile(HTML_TAG_PATTERN); } /** * Валидация html-тегов с помощью регулярного выражения * * @param tag * html-тег для валидации * @return валидный html-тег, false не валидный html-тег */ public boolean validate(final String tag) { matcher = pattern.matcher(tag); return matcher.matches(); } }
Unit Test:
package ru.topcode.skillbase.regexp.test; import org.testng.Assert; import org.testng.annotations.*; import ru.topcode.skillbase.regexp.HTMLTagValidator; public class HTMLTagValidatorTest { private HTMLTagValidator htmlTagValidator; @BeforeClass public void initData() { htmlTagValidator = new HTMLTagValidator(); } @DataProvider public Object[][] ValidHTMLTagProvider() { return new Object[][] { new Object[] { "<b>" }, new Object[] { "<input value='>'>" }, new Object[] { "<input value='<'>" }, new Object[] { "<b/>" }, new Object[] { "<a href='http://www.google.com'>" }, new Object[] { "<br>" }, new Object[] { "<br/>" }, new Object[] { "<input value=\"\" id='test'>" }, new Object[] { "<input value='' id='test'>" } }; } @DataProvider public Object[][] InvalidHTMLTagProvider() { return new Object[][] { new Object[] { "<input value=\" id='test'>" }, new Object[] { "<input value=' id='test'>" }, new Object[] { "<input value=> >" } }; } @Test(dataProvider = "ValidHTMLTagProvider") public void ValidHTMLTagTest(String tag) { boolean valid = htmlTagValidator.validate(tag); System.out.println("Валидность HTML-тега : " + tag + " , " + valid); Assert.assertEquals(true, valid); } @Test(dataProvider = "InvalidHTMLTagProvider", dependsOnMethods = "ValidHTMLTagTest") public void InValidHTMLTagTest(String tag) { boolean valid = htmlTagValidator.validate(tag); System.out.println("Валидность HTML-тега : " + tag + " , " + valid); Assert.assertEquals(false, valid); } }
Результат выполнения теста:
Валидность HTML-тега : <b> , true Валидность HTML-тега : <input value='>'> , true Валидность HTML-тега : <input value='<'> , true Валидность HTML-тега : <b/> , true Валидность HTML-тега : <a href='http://www.google.com'> , true Валидность HTML-тега : <br> , true Валидность HTML-тега : <br/> , true Валидность HTML-тега : <input value="" id='test'> , true Валидность HTML-тега : <input value='' id='test'> , true Валидность HTML-тега : <input value=" id='test'> , false Валидность HTML-тега : <input value=' id='test'> , false Валидность HTML-тега : <input value=> > , false PASSED: ValidHTMLTagTest("<b>") PASSED: ValidHTMLTagTest("<input value='>'>") PASSED: ValidHTMLTagTest("<input value='<'>") PASSED: ValidHTMLTagTest("<b/>") PASSED: ValidHTMLTagTest("<a href='http://www.google.com'>") PASSED: ValidHTMLTagTest("<br>") PASSED: ValidHTMLTagTest("<br/>") PASSED: ValidHTMLTagTest("<input value="" id='test'>") PASSED: ValidHTMLTagTest("<input value='' id='test'>") PASSED: InValidHTMLTagTest("<input value=" id='test'>") PASSED: InValidHTMLTagTest("<input value=' id='test'>") PASSED: InValidHTMLTagTest("<input value=> >") =============================================== ru.topcode.skillbase.regexp.test.HTMLTagValidatorTest Tests run: 12, Failures: 0, Skips: 0 ===============================================
Для углубленного изучения регулярных выражений в Java рекомендую посетить соответствующий раздел The Java Tutorials и изучить книги из раздела RegExp в библиотеке TopCode.


