Regex help, жадный против не жадный - PullRequest
2 голосов
/ 05 июня 2009

Привет всем, у меня есть большая строка HTML, как

<a style="background: rgb(100, 101, 43) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-backg    round-inline-policy: -moz-initial;" href="#">swatch4</a>  
<a style="background: rgb(34, 68, 33) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-b    ackground-inline-policy: -moz-initial;" href="#">swatch5</a>  
<a style="background: rgb(11, 38, 68) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -m    oz-background-inline-policy: -moz-initial;" href="#">swatch6</a>  
<a style="background: rgb(39, 11, 60) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial    ; -moz-background-inline-policy: -moz-initial;" href="#">swatch7</a>

... Есть много таких записей ...

В итоге я бы хотел получить массив php

$colors = array(
 'rgb(34, 34, 33)',
 'rgb(11, 38, 68)',
...
); 

и т.д..

Шаг Мне нужна помощь с извлечением части rgb строки. У меня проблемы с тем, что мои регулярные выражения слишком много едят. Любая помощь будет оценена, я хотел бы разобраться в этом и узнать, как это сделать (в отличие от просто сделать это). Я использую VIM кстати.

Спасибо

Ответы [ 2 ]

6 голосов
/ 05 июня 2009

Простое регулярное выражение

(rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\))

Каждый "\ s * \ d {1,3} \ s *," означает:

  • соответствует пробелу (пробел, как '', или табуляция, как говорит Мольф в комментариях, в количестве от 0 до inf)
  • соответствует цифре (от 1 до 3 цифр, поскольку вы переходите от 0 до 255)
  • соответствует другим пробелам
  • соответствует запятой (,)

Вы можете использовать код Паоло для части массива.

0 голосов
/ 05 июня 2009
preg_match_all('/rgb\(\d{1,3}, \d{1,3}, \d{1,3}\)/', $string, $matches);
print_r($matches);

Если вы не уверены в расстоянии, используйте:

preg_match_all('/rgb\(\d{1,3},\s?\d{1,3},\s?\d{1,3}\)/', $string, $matches);
print_r($matches);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...