![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 342 Pomógł: 23 Dołączył: 20.01.2011 Skąd: Chełm Ostrzeżenie: (0%) ![]() ![]() |
Ostatnio tak sobie szukałem jakiś zadań z wyrażeń regularnych bo wypadałoby poćwiczyć chociaż trochę i coś ogarnąć z tego i natrafiłem na takie zadanie
Write one regular expression to match the following three phrases. The expression must capture the values of latitude, longitude, city, and state into regex groups 1, 2, 3, and 4. "lat":"42.350645","lon":"-71.130995 ","city":"Boston","state":"MA" "lat":"","lon":,"city":"NEW YORK","state":"NY" "lat":"33.68223755","lon":"-112 ","city":"Phoenix","state":"az" Jednym wyrażeniem regularnym mam wyciągnąć i pogrupować na długość, szerokość geograficzną, miasto i stan. Na chwilę obecną mam tylko tak Kod @"""lat"":""(?<group1>[+-]?(\d+\.\d+)?(\d+))[\s]*"",""lon"":""(?<group2>[+-]?(\d+\.\d+)?(\d+))[\s]*"",""city"":""(?<group3>\w+)"",""state"":""(?<group4>\w{0,2})"""; ///pod ide Visual studio dostosowane wyciąga w miarę tak jak trzeba ale z drugiej pozycji nie chce mi przypisać miasta i stanu do grupy 3 i 4 mam jeszcze tak Kod @"((""lat"":""(?<group1>([+-]?(\d+\.\d+)(\d+))[\s]*)"")|(""lon"":""(?<group2>([+-]?(\d+\.\d+)?(\d+))[\s]*)"")|(""city"":""(?<group3>(\w+\s?)*)"")|(""state"":""(?<group4>(\w{0,2}))""))"; ale też nie daje mi tego efektu w pętli co trzeba. z tego co wiem to efekt końcowy dla zadania powinien być taki: Cytat 42.350645,-71.130995,Boston,MA ,,NEW YORK,NY 33.68223755,-112,Phoenix,az w pierwszym przypadku brakuje całości z drugiej linii a w drugim przypadku wychodzi tak Cytat 42.350645,,, ,-71.130995,, ,,Boston, ,,,MA ....... ////i podobnie jest dla reszty nie wiem co robię źle akurat tutaj już trochę czasu kombinuje i nic nie mogę wymyślić. w PHP i C# próbuję to robić i nadal ten sam efekt, a c# zainstalowany bo może przydało by się porobić coś w nim od czasu do czasu (IMG:style_emoticons/default/happy.gif) . Ten post edytował olszam 11.09.2016, 15:40:20 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Uważam, że nie ma co dopasowywać do konkretnego formatu - liczy się jakakolwiek wartość. Później taką wartość można sobie zwalidować i wyświetlić użytkownikowi komunikat o błędzie lub o powodzeniu lub zrobić cokolwiek innego. Wartość błędna to też wartość, jak podasz eee jako szerokość geograficzna, to znaczy, że podałeś szerokość geograficzną, tylko nieprawidłową. To, że dopasujesz do liczb nie oznacza, że wartość szerokości będzie poprawna, bo np. szerokość geograficzna o wartości
361.1234 jest zupełnie niepoprawna. Idealnie pasuje tutaj Value Object, który z założenia posiada swój wewnętrzny walidator i nie zależy od żadnych walidatorów zewnętrznych. Wtedy robisz sobie new Latitude($value) i jak nie dostaniesz wyjątku podczas instancjonowania klasy Latitude to znaczy, że podana szerokość jest poprawna. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 13:06 |