Java - вопрос о регулярных выражениях

2

Я новичок в регулярных выражениях. Я хочу использовать функцию java replaceAll() для замены любых комментариев CSS в строке.

В основном я хочу использовать регулярное выражение для поиска всего, что окружено "/*" и "*/", и заменить его на "".

Теги:

4 ответа

2
Лучший ответ

В одном примере, когда простое регулярное выражение терпит неудачу:

body { font-family: "/* this is not a comment */"; }

Но если вас не волнуют эти случаи, вы можете просто пойти с этим:

str.replaceAll("/\\*.*?\\*/", "");

Совпадение начинается с первого найденного /*, а затем ищет следующий */ с максимально возможным количеством символов (.*?).

2

Это невозможно. Большинство комментариев можно найти в большинстве ситуаций с регулярными выражениями, но CSS не является регулярной грамматикой, поэтому вы не можете найти все случаи с регулярными выражениями.

  • 0
    Хммм. Как бы вы предложили мне это сделать?
  • 0
    @Jacob - ищите существующий инструмент, который делает эту работу; например, сделайте поиск в Google для "CSS компресс". Или, если вы хотите встроить код для этого, попробуйте «CSS-парсер Java».
1

Возможно, вы запустите javascript через один из доступных доступных мини-приложений javascript/CSS. Среди других трюков, чтобы сделать его меньше, он также удаляет комментарии.

  • 0
    Я использую Java. не JavaScript
  • 0
    Я имел в виду CSS, спасибо, что поправили меня. Я думаю, я говорю, что регулярные выражения Java не лучший инструмент. Получить решение на 95% довольно просто, но из-за сложности наличия всех комбинаций нескольких языков, escape-последовательностей, / * ... * / в строках или разделах CDATA регулярные выражения быстро становятся неуправляемыми. Регулярные выражения являются мощным инструментом при модерации.
0

Я предлагаю использовать компрессор YUI. Download JAR, поместите путь к классам и используйте его следующим образом:

BufferedReader reader = null;
BufferedWriter writer = null;
try {
    reader = new BufferedReader(new InputStreamReader(new FileInputStream("/path/to/original.css"), "UTF-8"));
    writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/path/to/compressed.css"), "UTF-8"));
    new CssCompressor(reader).compress(writer, -1);
} finally {
    if (writer != null) try { writer.close(); } catch (IOException logOrIgnore) {}
    if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}

Однако он не только удаляет комментарии, но также уменьшает CSS. Не уверен, что это соответствует требованиям, но оно также имеет преимущества. Мы используем его здесь во время автоматических развертываний webapp.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню