Изменить регулярное выражение, чтобы оно не соответствовало символу точки

#php #regex

#php #регулярное выражение

Вопрос:

Как можно изменить это регулярное .[^.]*} выражение, чтобы оно не соответствовало символу . между . amp; } ?

Например: при запуске со строкой ниже она начинается с .png . На самом деле оно должно начинаться с .header

В примере это понятнее

 .header {
    background: no-repeat url(0ffe4313f8b7667a4bf7df304b0fdf75.png) 0 -126px;
    -webkit-background-size: 307px 472px;
    background-size: 307px 472px;
    width: 220px;
    height: 220px;
}
 

Комментарии:

1. Почему вы пытаетесь анализировать CSS с помощью регулярных выражений?

2. … и что именно вы пытаетесь разобрать?

3. Вероятно, нет веской причины пытаться анализировать CSS с помощью регулярных выражений, но я думаю, вы .[^}]*} все равно имели в виду.

4. Вы заметили, что точка в .png является первой точкой перед } ? вы пытаетесь сопоставить точку, а затем любой символ, который не является точкой. Вот почему вы получаете последнюю точку.

Ответ №1:

Вы можете использовать

 (?sm)^..*?}$
 

Смотрите демонстрацию регулярных выражений.

Подробные сведения:

  • (?sm) — встроенные модификаторы DOTALL и MULTILINE позволяют . сопоставлять строки ( s ) и переопределять ^ $ привязки и для соответствия границам строк ( m )
  • ^ — начало строки
  • . — точка
  • .*? — любые нулевые или более символов, как можно меньше
  • }$ — a } в конце строки.

Комментарии:

1. Хорошо, но не будет работать, если все это в одной строке.

2. @Norman Затем удалите ^ before } . Посмотрите эту демонстрацию .