Регулярное выражение для получения вертикального смещения из CSS - PullRequest
1 голос
/ 15 декабря 2009

Я возился с этим в течение почти часа и никуда не денусь. Регексы не моя сильная сторона.

У меня есть данные, подобные следующим:

.cke_button_about .cke_icon { background-position: 0 -76px; }
.cke_button_maximize .cke_icon { background-position: 0 -108px; }

Мне нужно заменить вертикальные значения (-76px и -108px), используя preg_replace_callback(). Функция обратного вызова написана, но я не могу на всю жизнь правильно вывести номера.

Это прекрасно работает для 4-значных чисел:

preg_replace_callback("/(background\-position\:)(.*)(\d{4})(px)/", "recalculate",
$css_string);

но как я могу сделать так, чтобы он распознавал любой номер? {1-4} должен работать, но как-то конфликтует с первым горизонтальным значением.

Кто-нибудь хотел бы помочь мне?

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 15 декабря 2009

((-?)[0-9.]+), вероятно, будет лучше, это будет соответствовать следующим случаям:

  • 1,0
  • 1000
  • -400
  • 642,42
  • -642,42
  • 0

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

preg_replace_callback("/(background\-position\:)(.*?)((-?)[0-9.]+)(px)/", "recalculate",
$css_string);
1 голос
/ 15 декабря 2009

Можете ли вы сделать (background\-position)(.*)([0-9]+)(px)?

1 голос
/ 15 декабря 2009
/(background\-position\:)(\D*\d*\D*)(\d+)(px)/

Получает то, что вы хотите, сохраняя текущие группы захвата.

0 голосов
/ 15 декабря 2009

а как же preg_replace_callback("/(background\-position\:)\s*(\d+)\s+(\d{4})(px)/", "recalculate", $css_string);? + означает «один или несколько»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...