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

标签 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 部分。我的正则表达式吃掉了太多字符串,遇到了麻烦。任何帮助将不胜感激,我想把它记下来并学习如何做(而不是仅仅完成它)。顺便说一句,我正在使用 vim。

谢谢

最佳答案

简单的正则表达式是

(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 的代码用于数组部分。

关于php - 正则表达式帮助,贪婪与非贪婪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/953000/

相关文章:

html - float div 和旁边的非 float div 的高度均为 100%

javascript - 使用 JS 将变量传递给 PHP

PHP MYSQL : 1st column as a header, 第二和第三列作为行

php - 如何在 PHP 中创建一个 "content_for"等价物?

html - 如何在标题旁边放置一个按钮?

javascript - 将鼠标悬停在图像上时如何使图像变宽,而其他图像变窄?

javascript - 负面回顾 JavaScript

c++ - C++11 中默认的正则表达式引擎是什么?

php - 如何编辑巨大的 SQL 转储?

php - Laravel 在通知邮件中添加密件抄送