Доброго времени суток. Нужна помощь по задаче 1918. Хочу решить задачу через регулярку (без коллекций разных и прочего), но все не выходит.
Без применения регулярки решить не сложно, через библиотеку SOUP вообще делов нет, благо и примеров много, а вот регуляркой не получается :(
Если захочешь посмотреть читай ниже:
Вариант 1: Pattern pattern = Pattern.compile("(<" + tag + ">?)([A-Za-z0-9_ :\\\"]+)(</" + tag + ">)");
я тут отбираю только теги НО БЕЗ вложенностей;
Вариант 2 (примечание где ??, между вопросами стоит тэг): (((?<Open>(??))(\s+[\w-]+="[^"]*")*).*<\/?span>) - тут вроде при первом совпадении получается найти вложенности, но (только 2 открывающихся тэга и 1 закрывающийся), а вот второй закрывающийся тэг не выходит :(, пробовал дописать так:
(((?<Open>(??))(\s+[\w-]+="[^"]*")*).*<\/?span>)\w+(<\/?span>), но затык тут: w+(<\/?span>).
Нашел ресурс где вроде как есть итоговое выражение подходящее, только заменить под нужный тэг на джаву, там любой тэг ищется, но в джаве по аналогии написать не выходит, пробовал https://regex101.com/ и в Python, JavaScript, PHP код не проходит((((
Ресурс со статьей и тэгом (не вирусный;)): http://codius.ru/articles/%D0%9F%D0%B0%D1%80%D1%81%D0%B8%D0%BC_HTML_%D0%98%D0%B3%D0%BD%D0%BE%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%B4%D0%BE%D0%B1%D0%BD%D1%8B%D1%85_%D0%B2%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B9_%D0%B8%D0%BB%D0%B8_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F_%D0%B2_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F%D1%85
Итоговое 3е выражение там
Короче что то не так, может можешь помочь разобраться как решить задачу только с использование регулярки, я ошибаюсь и как то не так мыслю. Спасибо.
package com.javarush.task.task19.task1918;
/*
Знакомство с тегами
*/
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.parser.Parser;
import org.jsoup.select.Elements;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
public static void main(String[] args) throws IOException {
/*
BufferedReader consolReader = new BufferedReader(new InputStreamReader(System.in));
String fileName = consolReader.readLine();
consolReader.close();
String tag = args[0];
//Pattern pattern = Pattern.compile("((<" + tag + "[A-Za-z0-9_ :<>\\\"]+)(<" + tag + ">(\\w+)</" + tag + ">)?(</" + tag + ">))");
// Pattern pattern = Pattern.compile("(<" + tag + ">?)([A-Za-z0-9_ :\\\"]+)(</" + tag + ">)");
//Pattern pattern = Pattern.compile("\\/<[^<>]+>/g");
//Pattern pattern = Pattern.compile("((<" + tag + "[A-Za-z0-9_ :<>\\\"]+)(</" + tag + ">))");
Pattern pattern = Pattern.compile("<(?<tag>[A-Z][A-Z0-9_ :<>\\\"]+)[^>]*>.*?</\\k<tag>>");
//Pattern pattern = Pattern.compile("(<" + tag + ">(\\w+)</" + tag + ">)");
String result = "";
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName))) {
String readLine;
while (null != (readLine = bufferedReader.readLine())) {
result += readLine;
}
} catch (IOException e) {
System.out.println("Error read file " + e);
throw new IOException();
}
System.out.println(result);
Matcher matcher = pattern.matcher(result);
while (matcher.find()) {
System.out.println(matcher.group());
}
*/
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
while (bufferedReader.ready()) {
String htmlStr = bufferedReader.readLine();
Document doc = Jsoup.parse(htmlStr, "", Parser.xmlParser());
Elements elements = doc.select(args[0]);
System.out.println(elements);
}
bufferedReader.close();
}
}