Я пытаюсь обнаружить куски <code>...
внутри файла исходного кода HTML, чтобы удалить их из файла.Я использую Java 8 Pattern и Matcher классы для реализации RegEx.Например, этот метод печатает каждый <code>...
результат.
protected void printSourceCodeChunks() {
// Design a regular expression to detect code chunks
String patternString = "<code>.*<\\/code>";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(source);
// Loop over findings
int i = 1;
while (matcher.find())
System.out.println(i++ + ": " + matcher.group());
}
Типичный результат будет:
1: <code> </code>
2: <code></code>
3: <code>System.out.println("Hello World");</code>
Поскольку я использую специальный символ точка , а порции исходного кода могут содержать разрывы строк (\ n или \ r), блоки кода, включая разрывы строк, обнаруживаться не будут.К счастью, класс Pattern может быть проинструктирован включать разрывы строк в значение точка , просто добавляя
Pattern pattern = Pattern.compile(patternString, Pattern.DOTALL);
Проблема с этим подходом состоит в том, что только один (поддельный) <code>...
обнаружен блок: тот, который начинается с первого вхождения <code>
и последнего вхождения
в файле HTML.Вывод теперь включает в себя весь HTML-код между этими двумя тегами.
Как я могу изменить выражение регулярного выражения для соответствия каждому отдельному блоку кода?
Предложение решения
Как многовы опубликовали, и для будущих читателей это было так просто, как изменить мое регулярное выражение на
<code>.*?<\\/code>
, так как * принимает все символы до последнего
, который он находит.