正则表达式帮助,贪婪与非贪婪

时间:2009-06-04 20:48:14

标签: php html regex parsing

嘿,我有一个像

这样的大型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部分。我的正则表达式吃了太多的字符串我遇到了麻烦。 Anyhelp将不胜感激,我想把它弄清楚并学习如何做(而不是完成它)。我正在使用vim btw。

由于

2 个答案:

答案 0 :(得分:6)

简单的正则表达式是

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

每个“\ s * \ d {1,3} \ s *,”表示:

  • 匹配空格(像''或者标签一样的空格,正如molf在评论中所说,从0到inf的数字)
  • 匹配一个数字(从1位到3位,因为你从0到255)
  • 匹配其他空格
  • 匹配逗号(,)

您可以将Paolo的代码用于数组部分。

答案 1 :(得分:0)

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);