Szukam sposobu na wykonanie dopasowania wyrażenia regularnego na łańcuchu w Rubim i spowodowanie zwarcia w pierwszym dopasowaniu.
Ciąg, który przetwarzam, jest długi iz tego, jak wygląda, standardowy sposób ( match
metoda) przetworzyłby całość, zebrałby każde dopasowanie i zwrócił obiekt MatchData zawierający wszystkie dopasowania.
match = string.match(/regex/)[0].to_s
capture
argument - który pozwala zwrócić przechwycenie zamiast pełnego dopasowania.Możesz użyć
[]
: (czyli jakmatch
)źródło
Jeśli ważne jest tylko istnienie dopasowania, możesz iść
Tak czy inaczej,
match
powinno zwracać tylko pierwsze trafienie, podczas gdyscan
przeszukuje cały ciąg. Dlatego jeśliźródło
Nie jestem jeszcze pewien, czy ta funkcja jest niesamowita, czy po prostu całkowicie szalona, ale twoje wyrażenie regularne może definiować zmienne lokalne.
(Zaczerpnięte z http://ruby-doc.org/core-2.1.1/Regexp.html ).
źródło
regex =~ string", not when
string = ~ regex`Wyrażenie regularne (regex) to nic innego jak automat skończony (FSM).
FSM próbuje odpowiedzieć na pytanie "Czy ten stan jest możliwy, czy nie?"
Próbuje dopasować wzorzec do momentu znalezienia dopasowania (sukces) lub do czasu, gdy wszystkie ścieżki zostaną zbadane i nie zostanie znalezione żadne dopasowanie (niepowodzenie).
Po sukcesie pytanie „Czy ten stan jest możliwy, czy nie?” otrzymała odpowiedź „tak”. Dlatego dalsze dopasowywanie nie jest konieczne i wyrażenie regularne powraca.
Zobacz to i to, aby uzyskać więcej informacji na ten temat.
Dalej: oto interesujący przykład pokazujący, jak działa regex. Tutaj wyrażenie regularne służy do wykrywania, czy podana liczba jest liczbą pierwszą. Ten przykład jest w perlu, ale równie dobrze można go napisać w języku ruby.
źródło