2012-12-27 17 views
5

Tak więc moja firma używa strony trzeciej w swoich witrynach mobilnych i mamy konsolę, która aktualizuje niektóre kody i kontroluje je za ich pośrednictwem. Jedną z rzeczy jest funkcja wyszukiwania i zamiany, która może aktualizować kod witryny. Jedynym, że to jest, używa dużo skomplikowanego kodu regex i nie mogę znaleźć dobrego tutoriala na temat złożonych rzeczy. Więc tutaj jest przykład dał mi, że wciska chwyta znacznik akapitu i umieszcza go w linkuWyszukaj i zamień na Regex zastępując zmienne

Szukaj

(#d6d6d4.+?>.+?<p><a.+?>.+?)</a>(.+?)</td> 

Zamień

$1$2</a></td> 

Jaki jest $ 1 oraz 2 $ reprezentuje? Wiem, że prawdopodobnie ma to coś wspólnego z jednym z. +? ale nie jestem pewien, który. Jeśli ktoś wie, pomóż mi. Dodałem kod na dole z numerami obok zmiennych regex

(#d6d6d4.+?**[1]**>.+?**[2]**<p><a.+?**[3]**>.+?**[4]**)</a>(.+?**[5]**)</td> 

Odpowiedz

14

$ 1 i $ 2 reprezentują tekst w przechwytywaniu grup w wyrażeniu regularnym. Grupy przechwytujące znajdują się w nawiasach.

(  // start first capture group 
#d6d6d4 // match #d6d6d4 
.+?>  // any character, non-greedy, up to '>' 
.+?<p> // any character, non-greedy, up to <p> 
<a.+?> // an <a..> tag, consuming everything up to '>' 
.+?  // all characters from <a> to </a> 
)  // close the first capture group before the '</a>' 
</a>  // literal '</a>' 
(  // start second capture group 
.+?  // match all, non-greedy up to '</td>' 
)  // close capture group before '</td>' 
</td> // literal '</td>' 

Więc jeśli masz ten ciąg: <td color=#d6d6d4 foo=bar>Hello, world<p><a href=http://foo.com>foo link</a>some more text</td>

$ 1 meczów: #d6d6d4 foo=bar>Hello, world<p><a href=http://foo.com>foo link $ 2 spotkania: some more text

więc ciąg jest przekształcony: <td color=#d6d6d4 foo=bar>Hello, world<p><a href=http://foo.com>foo linksome more text</a></td>

co zasadniczo oznacza, że Znacznik </a> został przeniesiony po some more text (lub tuż przed </td> jeśli wolisz)

+2

Dziękuję, że to była ogromna pomoc, zobacz $ 1 Nie wiedziałem, że to grupa przechwytująca, więc jest to ogromna pomoc! Dziękuję Ci! – user1566783

1

uważam http://rubular.com/ być doskonałym narzędziem szkoleniowym dla regex, ponieważ jest to interaktywny i można próbować różnych wzorów przeciwko innym tekstem i widać wyniki natychmiast.

Zawiera link do http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html#UJ, który jest dobrym podstawowym przewodnikiem po wyrażeniach regularnych.

Jest też http://www.regular-expressions.info/

Dlaczego walka napisać własny, gdy pojawia się nawet miejsce dla 3,500+ regex bibliotek w http://regexlib.com

dolarów zmienne są używane do sklepu „mecz, że są: - 1 $ za pierwszy mecz; 2 $ za sekundę itd.

+0

OK, widzę, gdzie na dole pojawia się 2 dolary, ale gdzie jest 1 $, otrzymuję informacje – user1566783

+0

Dzięki za te strony, lubię reggy aplikację do testowania. http://reggyapp.com/ – DogCoffee

4

Zmienna $ 1 i 2 $ to przechwycone mecze dla ojców w środku (parens) 1 $ to pierwsza grupa paren, a 2 $ to druga.

+0

Ok, więc 2 dolary przechwytują ostatnią między tagami zamykającymi, ale czy 1 $ nie jest w stanie uzyskać tego, co jest tuż po otwarciu tagu? – user1566783

+0

Zgadza się. – Barmar

+0

OK, ale myślę, że to jest to, na co jestem zdezorientowany od, dlaczego nie byłby ten tuż przed tagiem akapitu? – user1566783

Powiązane problemy