Mam długą listę słów, znaków i nowych wierszy, jak powiedzieć regex, aby przeszukiwał tylko tekst pomiędzy DWIEMI DOKŁADNYMI SŁOWAMI na liście?
To właśnie wymyśliłem, ale NIE przestaje szukać ”
(?!color).*id":(.*?),\s.*name": "(.*?)",\s.*\s.*miles
przykład: chcę, aby tonacja REGEX zwracała następujące informacje i przestała szukać po osiągnięciu koloru słowa ponownie.
Mecze:
1159 SAM
1597 ROBERT
1423 CARLOS
Kod:
Mam długą listę słów, znaków i nowych wierszy, jak powiedzieć regex, aby przeszukiwał tylko tekst pomiędzy DWIEMI DOKŁADNYMI SŁOWAMI na liście?
Przykład:
Chcę, aby REGEX zwrócił następujące informacje i przestał wyszukiwać po ponownym uzyskaniu koloru słowa.
Mecze:
1159 SAM
1597 ROBERT
1423 CARLOS
Kod:
{
"groups": [{
"id": 113,
"name": "CAPISCO",
"color": "#07380f",
"params": [{
"id": 1559,
"name": "SAM.",
"km": "1500",
"miles": "0"
}, {
"km": "900",
"miles": "0"
}, {
"km": "320",
"miles": "0"
}, {
"id": 1597,
"name": "ROBERT.",
"km": "1500",
"miles": "0"
}, {
"km": "900",
"miles": "0"
}, {
"km": "320",
"miles": "0"
}, {
"id": 1423,
"name": "CARLOS.",
"km": "1500",
"miles": "0"
}, {
"km": "900",
"miles": "0"
}, {
"km": "320",
"miles": "0"
"id": 113,
"name": "CORBAEU",
"color": "#09854",
"id": 113,
"name": "SALUD",
"color": "#07380f",
"id": 1012,
}, {
"km": "1500",
"miles": "0"
}, {
"km": "900",
"miles": "0"
}, {
"km": "320",
"miles": "0"
}, {
"id": 98,
"name": "ANNIE.",
"km": "1500",
"miles": "0"
}, {
"km": "900",
"miles": "0"
}, {
"km": "320",
"miles": "0"
}, {
"id": 1367,
"name": "PETE.",
"km": "1500",
"miles": "0"
}, {
"km": "900",
"miles": "0"
}, {
"km": "320",
"miles": "0"
"id": 866,
"name": "Jay.",
"km": "1500",
"miles": "0"
}, {
"km": "900",
"miles": "0"
}, {
"km": "320",
"miles": "0"
}, {
"id": 15933,
"name": "JEAN.",
"km": "1500",
"miles": "0"
}, {
"km": "900",
"miles": "0"
}, {
"km": "320",
"miles": "0"
Odpowiedzi:
Regex to język pasujący do wzorca. Dzięki niemu definiujesz tylko wzór. Nie ma sposobu na utrzymanie licznika do zapamiętania liczby dopasowań - to zależy wyłącznie od implementacji przy użyciu mechanizmu wyrażeń regularnych - na przykład możesz napisać trochę kodu w dowolnym języku programowania obsługującym wyrażenia regularne, aby zachować liczbę meczów i zatrzymaj się po n znaleziono mecze. Możesz skonstruować tylko wyrażenie regularne, które dopasuje daną grupę dokładnie określoną liczbę razy, powtarzając wzór. Innymi słowy - powtórz swój wzór trzy razy, aby uzyskać trzy mecze. Na przykład:
(expr)
boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
et cetera ... W twoim przypadku „granica słowa kluczowego” to „kolor”.
Wyrażenie regularne nie pozwala mu znaleźć nieznanej liczby dopasowań, a następnie zatrzymać się przy danym słowie. Typowe metody wyrażeń regularnych znajdują tylko pierwsze dopasowanie lub wszystkie dopasowania wzorca w dokumencie. Twój problem wymaga niestandardowej implementacji. W języku programowania, w którym można napisać pętlę, która najpierw dopasowuje pozycję słowa kluczowego, stamtąd pasuje do wzorca, i dopasowuje ten wzór, aby znaleźć kolejne elementy, aż zbliży się do następnego słowa kluczowego, w którym się zatrzymuje.
źródło