#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}
. Посмотрите эту демонстрацию .