Regex: dopasowanie do pierwszego wystąpienia znaku
Szukam wzorca, który pasuje do wszystkiego aż do pierwszego wystąpienia określonego znaku, powiedzmy"; " - a średnik .
Napisałem tak:
/^(.*);/
Ale w rzeczywistości pasuje do wszystkiego (łącznie ze średnikiem) aż do ostatniego wystąpienia średnika.
11 answers
Potrzebujesz
/[^;]*/
[^;]
jest klasą znaków , pasuje do wszystkiego oprócz średnika.
Aby przytoczyć perlre
manpage:
Możesz określić klasę znaków, załączając listę znaków w [], która będzie pasować do dowolnego znaku z listy. Jeśli pierwszy znak po " ["to"^", klasa pasuje do dowolnego znaku spoza listy.
Powinno to działać w większości dialektów regex.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-12 22:45:40
Would;
/^(.*?);/
Praca?
?
jest operatorem leniwym, więc regex chwyta jak najmniej przed dopasowaniem ;
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-10 18:01:20
/^[^;]*/
[ ^ ;] mówi dopasuj cokolwiek poza średnikiem. Nawiasy kwadratowe są operatorem dopasowującym zbiór, zasadniczo pasują do dowolnego znaku w tym zbiorze znaków, ^
na początku sprawia, że jest to odwrotne dopasowanie, więc dopasuj cokolwiek , a nie w tym zbiorze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-06 13:26:59
Try /[^;]*/
Google regex character classes
po szczegóły.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-06 13:49:57
Try /[^;]*/
To negacja klasy znaków .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-06 13:21:08
To nie jest rozwiązanie regex, ale coś wystarczająco prostego do opisu problemu. Po prostu Podziel swój ciąg i pobierz pierwszy element z tablicy.
$str = "match everything until first ; blah ; blah end ";
$s = explode(";",$str,2);
print $s[0];
Wyjście
$ php test.php
match everything until first
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-06 14:31:33
Przykładowy tekst:
"this is a test sentence; to prove this regex; that is g;iven below"
Jeśli na przykład mamy przykładowy tekst powyżej, regex /(.*?\;)/
da Ci wszystko do pierwszego wystąpienia średnika (;
), łącznie ze średnikiem: "this is a test sentence;"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-20 13:26:13
To było bardzo pomocne dla mnie, ponieważ próbowałem dowiedzieć się, jak dopasować wszystkie znaki w znaczniku xml, w tym atrybuty. Natknąłem się na problem "dopasowuje wszystko do końca"z:
/<simpleChoice.*>/
Ale udało się rozwiązać problem za pomocą:
/<simpleChoice[^>]*>/
Po przeczytaniu tego postu. Dziękuję wszystkim.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-05 14:26:26
"/^([^\/]*)\/$/"
mi się udało, aby uzyskać tylko top "foldery" z tablicy typu:
a/ <- this
a/b/
c/ <- this
c/d/
/d/e/
f/ <- this
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-06 18:57:52
Naprawdę trochę smutne, że nikt nie dał prawidłowej odpowiedzi....
In regex,? nie jest chciwy. Domyślnie regex będzie pasował jak najwięcej (greedy)
Wystarczy dodać a ? i to będzie nie chciwy i dopasować jak najmniej!
Powodzenia, mam nadzieję, że to pomoże.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-19 21:01:51
To dopasuje się do pierwszego wystąpienia tylko w każdym łańcuchu i zignoruje kolejne wystąpienia.
/^([^;]*);*/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-27 13:59:44