Jak mogę sprawić, by następujące wyrażenie regularne ignorowało rozróżnianie wielkości liter? Powinien pasować do wszystkich prawidłowych znaków, ale ignorować, czy są one pisane małymi czy dużymi literami.
Zauważ, że dla greping jest to po prostu dodanie -imodyfikatora. Np .: grep -rni regular_expressionaby wyszukać to „wyrażenie_ regularne” r'kursywnie, wielkość liter „i'nsensitive”, pokazując w wierszu numery „n”.
Gabriel Staples
Odpowiedzi:
444
Zakładając, że chcesz, aby całe wyrażenie regularne ignorowało wielkość liter, powinieneś poszukać iflagi . Obsługują go prawie wszystkie silniki regex:
/G[a-b].*/i
string.match("G[a-b].*","i")
Sprawdź dokumentację swojego języka / platformy / narzędzia, aby dowiedzieć się, w jaki sposób określono tryby dopasowania.
Jeśli chcesz, aby tylko część wyrażenia regularnego nie uwzględniała wielkości liter (jak zakładano w mojej pierwotnej odpowiedzi), masz dwie opcje:
Znakomity! Działa dla: perl -pe 's / ^ utf-8 \? B \?. * $ // gi' Cancer.1631, dopasowując / zastępując ciąg „UTF-8? B?” w pliku Cancer.1631. To się nie udaje: perl -pe 's / ^ utf-8 \? B \?. * $ // g' Cancer.1631, z powodu niedopasowania wielkości liter.
Victoria Stuart
Ten post byłby o wiele jaśniejszy, gdyby nie był tak konkretnym przykładem. Na przykład, jeśli chcesz zignorować wielkość liter dla innego słowa, takiego jak „.txt” i „.TXT”. Patrząc na tę odpowiedź, wciąż nie jestem pewien, jak mógłbym to zrobić.
Kyle Bridenstine
Z jakiegoś powodu regex, który opublikowałeś nie działa w findrozszerzonym regexie. Na przykład find . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \)nie pokazuje żadnych folderów .. biały podobny reged find . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)bez modyfikatorów pokazuje prawidłowe foldery. Masz pomysł, dlaczego?
alpha_989
Tutaj próbuję znaleźć wszystkie foldery zaczynające się od znaków tylko [a-c]w bieżącym folderze .. aby zrobić więcej manipulacji ..
alpha_989
Szczerze mówiąc, umieściłem opcję 2 w głównej części odpowiedzi, ponieważ jest ona ogólna i działa ze wszystkimi silnikami wyrażeń regularnych.
Puterdo Borato,
154
Zależy od implementacji, ale chciałbym użyć
(?i)G[a-b].
ODMIANY:
(?i)case-insensitive mode ON
(?-i)case-insensitive mode OFF
Nowoczesne smaki wyrażeń regularnych pozwalają stosować modyfikatory tylko do części wyrażenia regularnego. Jeśli wstawisz modyfikator (? Im) w środku wyrażenia regularnego, wówczas modyfikator dotyczy tylko części wyrażenia regularnego po prawej stronie modyfikatora. Dzięki tym smakom możesz wyłączyć tryby, poprzedzając je znakiem minus (? -I).
Jest to format modyfikujący silnik regex Search TortoiseHg.
mwolfe02
Czy możesz mi powiedzieć, jak można to osiągnąć w powłoce Linuxa (powiedzmy w egrep bez użycia przełącznika „-i”)?
Krishna Gupta
1
Wyjaśnienie, co (?i)robi i jak to zakończyć ( (?-i)) byłoby bardzo pomocne. Właśnie dlatego twoja odpowiedź ma 1/3 tyle głosów, co pytanie nr 1, a nie prawie tyle, ile wyjaśniają ten subtelny szczegół.
Gabriel Staples
55
wyrażenie regularne do sprawdzania poprawności „abc” ignorujące wielkość liter
iFlaga jest zwykle używany do sprawy niewrażliwości. Nie podajesz tutaj języka, ale prawdopodobnie będzie to coś w rodzaju /G[ab].*/ilub /(?i)G[ab].*/.
Czy ktoś może mi wyjaśnić, dlaczego ten post został odrzucony? Akceptowane rozwiązanie wykorzystuje określony kod i ze względu na kompletność chciałem dodać rozwiązanie dla standardowych bibliotek języka c ++. Moim zdaniem wygenerowałem wartość dodaną do bardziej ogólnego pytania.
Frankenstein,
5
Jak dowiedziałem się z tego podobnego postu ( ignoruj w AWK ), na starych wersjach awk (takich jak waniliowy Mac OS X), może być konieczne użycie 'tolower($0) ~ /pattern/'.
IGNORECASEalbo (?i)albo /pattern/ialbo będzie generować błąd lub powrócić prawdziwe dla każdej linii.
chciałbyś wiedzieć, dlaczego ta odpowiedź jest niewłaściwa dla danego pytania?
alpha_989
Masz to w swojej odpowiedzi „nie jest zbyt skomplikowane ani zbyt długie”
reggaeguitar
To właściwie jedyne rozwiązanie, które zadziałało w mojej sprawie. Wygląda również na najbardziej ogólne rozwiązanie, które powinno działać wszędzie. Wszystkie pozostałe odpowiedzi wydają się być bardzo specyficzne dla konkretnych implementacji wyrażeń regularnych.
Puterdo Borato,
1
Dodatek do już zaakceptowanych odpowiedzi:
Wykorzystanie grep:
Zauważ, że dla greping jest to po prostu dodanie -imodyfikatora. Np .: grep -rni regular_expressionaby wyszukać to „wyrażenie_ regularne” r'kursywnie, wielkość liter „i'nsensitive”, pokazując w wierszu numery „n”.
Możesz ćwiczyć Regex w Visual Studio i Visual Studio Code za pomocą funkcji znajdź / zamień.
Musisz wybrać Dopasuj wielkość liter i Wyrażenia regularne dla wyrażeń regularnych z wielkością liter. W przeciwnym razie [AZ] nie będzie działać. Wprowadź opis obrazu tutaj
Możesz również poprowadzić początkowy ciąg znaków, który będziesz sprawdzać pod kątem dopasowania wzorca, do małych liter. I używając we wzorze odpowiednio małych liter.
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
.grep
ing jest to po prostu dodanie-i
modyfikatora. Np .:grep -rni regular_expression
aby wyszukać to „wyrażenie_ regularne” r'kursywnie, wielkość liter „i'nsensitive”, pokazując w wierszu numery „n”.Odpowiedzi:
Zakładając, że chcesz, aby całe wyrażenie regularne ignorowało wielkość liter, powinieneś poszukać
i
flagi . Obsługują go prawie wszystkie silniki regex:Sprawdź dokumentację swojego języka / platformy / narzędzia, aby dowiedzieć się, w jaki sposób określono tryby dopasowania.
Jeśli chcesz, aby tylko część wyrażenia regularnego nie uwzględniała wielkości liter (jak zakładano w mojej pierwotnej odpowiedzi), masz dwie opcje:
Użyj modyfikatorów trybu
(?i)
i [opcjonalnie](?-i)
:Umieść wszystkie odmiany (tj. Małe i wielkie) w wyrażeniu regularnym - przydatne, jeśli modyfikatory trybu nie są obsługiwane:
Ostatnia uwaga: jeśli masz do czynienia ze znakami Unicode oprócz ASCII, sprawdź, czy Twój silnik regex obsługuje je poprawnie.
źródło
find
rozszerzonym regexie. Na przykładfind . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \)
nie pokazuje żadnych folderów .. biały podobny regedfind . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)
bez modyfikatorów pokazuje prawidłowe foldery. Masz pomysł, dlaczego?[a-c]
w bieżącym folderze .. aby zrobić więcej manipulacji ..Zależy od implementacji, ale chciałbym użyć
ODMIANY:
Nowoczesne smaki wyrażeń regularnych pozwalają stosować modyfikatory tylko do części wyrażenia regularnego. Jeśli wstawisz modyfikator (? Im) w środku wyrażenia regularnego, wówczas modyfikator dotyczy tylko części wyrażenia regularnego po prawej stronie modyfikatora. Dzięki tym smakom możesz wyłączyć tryby, poprzedzając je znakiem minus (? -I).
Opis pochodzi ze strony: https://www.regular-expressions.info/modifiers.html
źródło
(?i)
robi i jak to zakończyć ((?-i)
) byłoby bardzo pomocne. Właśnie dlatego twoja odpowiedź ma 1/3 tyle głosów, co pytanie nr 1, a nie prawie tyle, ile wyjaśniają ten subtelny szczegół.wyrażenie regularne do sprawdzania poprawności „abc” ignorujące wielkość liter
źródło
i
Flaga jest zwykle używany do sprawy niewrażliwości. Nie podajesz tutaj języka, ale prawdopodobnie będzie to coś w rodzaju/G[ab].*/i
lub/(?i)G[ab].*/
.źródło
Dla kompletności chciałem dodać rozwiązanie dla wyrażeń regularnych w C ++ z Unicode:
źródło
Jak dowiedziałem się z tego podobnego postu ( ignoruj w AWK ), na starych wersjach awk (takich jak waniliowy Mac OS X), może być konieczne użycie
'tolower($0) ~ /pattern/'
.IGNORECASE
albo(?i)
albo/pattern/i
albo będzie generować błąd lub powrócić prawdziwe dla każdej linii.źródło
DO#
w szczególności: options: RegexOptions.IgnoreCase
źródło
[gG] [aAbB]. * prawdopodobnie prawdopodobnie upraszcza rozwiązanie, jeśli wzór nie jest zbyt skomplikowany ani długi.
źródło
Dodatek do już zaakceptowanych odpowiedzi:
Wykorzystanie grep:
Zauważ, że dla
grep
ing jest to po prostu dodanie-i
modyfikatora. Np .:grep -rni regular_expression
aby wyszukać to „wyrażenie_ regularne” r'kursywnie, wielkość liter „i'nsensitive”, pokazując w wierszu numery „n”.Oto świetne narzędzie do weryfikacji wyrażeń regularnych: https://regex101.com/
Np .: Zobacz wyrażenie i objaśnienie na tym obrazie.
Bibliografia:
man grep
)źródło
W Javie
Regex
konstruktor maAby zignorować przypadki, użyj
źródło
Możesz ćwiczyć Regex w Visual Studio i Visual Studio Code za pomocą funkcji znajdź / zamień.
Musisz wybrać Dopasuj wielkość liter i Wyrażenia regularne dla wyrażeń regularnych z wielkością liter. W przeciwnym razie [AZ] nie będzie działać. Wprowadź opis obrazu tutaj
źródło
Możesz również poprowadzić początkowy ciąg znaków, który będziesz sprawdzać pod kątem dopasowania wzorca, do małych liter. I używając we wzorze odpowiednio małych liter.
źródło