Jeśli chcesz wzór, który znajdzie grupę $n
„th 4-cyfrowy, to wydaje się działać:
$pat = "^(?:.*?\\b(\\d{4})\\b){$n}";
if ($s =~ /$pat/) {
print "Found $1\n";
} else {
print "Not found\n";
}
zrobiłem to poprzez budowanie wzór ciąg, bo nie mógł dostać va riable interpolowane do kwantyfikatora {$n}
.
Ten wzór znajduje 4-cyfrowe grupy, które znajdują się na granicach słów (testy \b
); Nie wiem, czy to spełnia twoje wymagania. Wzorzec używa .*?
, aby zapewnić, że jak najmniej znaków jest dopasowanych do każdej czterocyfrowej grupy. Wzorzec jest dopasowywany $n
razy, a grupa przechwytywania $1
jest ustawiona tak, jak w ostatniej iteracji, tj. $n
'th.
EDYCJA: Kiedy po raz kolejny wypróbowałem to, wydawało się interpolować $n
w kwantyfikatorze. Nie wiem, co zrobiłem inaczej, niż ostatnio. Więc może to będzie działać:
if ($s =~ /^(?:.*?\b(\d{4}\b){$n}/) { ...
Jeśli nie, patrz Amona komentarz o qr//
.
W jakim języku się posługujesz? –
Witaj, Rohit. Używam Perla. Mój błąd, założyłem, że Regex jest taki sam. –
A dla rekordu istnieje kilka "dialektów" wyrażeń regularnych, każdy z własnym zestawem obsługiwanych funkcji. Na przykład, RegExp w JavaScript nie obsługuje negatywnych look-behinds, które są obsługiwane przez regexps w stylu Perla. –