W książce Eloquent JavaScriptchapter 9: Regular Expressions w sekcji „analizowania pliku INI” jest przykładem, który zawiera wyrażenie regularne nie złapać w ogóle. Autor stara się zanalizować następny zawartość:Jaka jest różnica między tymi dwoma wyrażeń regularnych? (Zrozumienie? Kwantyfikatorów)
searchengine=http://www.google.com/search?q=$1
spitefulness=9.7
; comments are preceded by a semicolon...
; each section concerns an individual enemy
[larry]
fullname=Larry Doe
type=kindergarten bully
website=http://www.geocities.com/CapeCanaveral/11451
[gargamel]
fullname=Gargamel
type=evil sorcerer
outputdir=/home/marijn/enemies/gargamel
sprawie zasad tego stanu formatu że
Puste linie i linie zaczynające się średnikiem są ignorowane.
Kod parsujący tę zawartość przewyższa każdy wiersz w pliku. W celu rozpatrzenia uwag, że to wyrażenie
^\s*(;.*)?
O ile mi zrozumieć, linie proces ten wyraz, który może rozpocząć z sekwencją
białych znaków, w tym miejsca, zakładki, formy , podawanie linii i inne przestrzenie Unicode
(source), aż pojawi się średnik ;, a następnie sekwencję "dowolny pojedynczy znak z wyjątkiem terminatorów linii: \ n, \ r, \ u2028 lub". Wszystko to ograniczone do {0,1} wyglądy.
Nie rozumiem punktu kwantyfikatora ? tutaj. Nie jestem w stanie znaleźć (regex101) żadnego przypadku, w którym nie ograniczanie wyrażeń pasującego ciągu może być problemem. Dlaczego to wyrażenie różni się od tego drugiego:
^\s*(;.*)
Z góry dziękuję.
Tekst na połączonej stronie mówi, że dane wejściowe są najpierw dzielone na wiersze, więc tryb multilinii nie jest używany i nie ma żadnych znaków nowej linii dla '\ s *'. (To przyciągnęło moją uwagę.) –
Dobrze, zmieniłem odpowiedź na * (jeśli modyfikator MULTILINE jest WŁĄCZONY, a dane wejściowe są tekstem zawierającym wiele linii) *. Jest to ogólna uwaga dla przyszłych czytelników. –
Dzięki. Tęskniłem, wyrażenie musiało pasować również do pustych linii. Dzięki, że odpowiadasz tak szybko. –