Olmayan açgözlü vs açgözlü Regex yardım,

2 Cevap php

Hey tüm Ben gibi büyük bir html dizesi

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

... Bu girişlerin yeri vardır ...

Ne ile bitirmek istiyorum bir php dizi

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

vb

Ben dize rgb parçasını çıkarmak yardıma ihtiyacım adım. Benim regexs dize çok fazla yeme ile sorun yaşıyorum. Anyhelp i (sadece yaptıktan aksine) bu aşağı almak ve nasıl yapılacağını öğrenmek istiyorum, mutluluk duyacağız. Ben btw vim kullanıyorum.

Teşekkürler

2 Cevap

Basit regex olduğunu

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

Her "s \ * \ s * \ d {1,3}," şu anlama gelir:

  • maç space (0'dan inf'e bir dizi molf açıklamalarda söylediği gibi 'gibi uzay', ya da sekme)
  • (255 kadar 0'dan gidin çünkü 3 haneye 1 basamak yukarısı) bir rakamla eşleşme
  • Diğer alanlarda maç
  • (,) virgül eşleşmesi

Sen dizi bölümü için Paolo'nun kodu kullanabilirsiniz.

preg_match_all('/rgb\(\d{1,3}, \d{1,3}, \d{1,3}\)/', $string, $matches);
print_r($matches);

Eğer boşluk konusunda emin değilseniz, kullanın:

preg_match_all('/rgb\(\d{1,3},\s?\d{1,3},\s?\d{1,3}\)/', $string, $matches);
print_r($matches);