W Javie, wykonując replaceAll w celu wyszukania wzorca wyrażenia regularnego, takiego jak:
replaceAll("\\?i\\b(\\w+)\\b(\\s+\\1)+\\b", "$1");
(aby usunąć zduplikowane kolejne słowa bez rozróżniania wielkości liter, np. test testowy), nie jestem pewien, gdzie umieściłem ?i
. Czytałem, że ma to być na początku, ale jak to wyjmę to łapię zduplikowane kolejne słowa (np. Test testowy), ale nie bez rozróżniania wielkości liter (np. Test testowy). Więc pomyślałem, że mógłbym dodać? I na początku, ale nie wydaje się, aby to wykonało zadanie. jakieś pomysły? Dzięki!
java
regex
case-sensitive
Kryształ
źródło
źródło
Odpowiedzi:
RegexBuddy mówi mi, czy chcesz dołączyć go na początku, oto poprawna składnia:
źródło
Możesz również dopasować wyrażenia regularne bez rozróżniania wielkości liter i uczynić je bardziej czytelnymi, używając stałej Pattern.CASE_INSENSITIVE, takiej jak:
źródło
Pattern.compile(myregex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE)
(?i)
rzecz, wyrażenia regularne Java były już dość nieczytelne: STak, niewrażliwość na wielkość liter można dowolnie włączać i wyłączać w wyrażeniu regularnym Java.
Wygląda na to, że chcesz coś takiego:
Zauważ, że flaga osadzenia nie
Pattern.CASE_INSENSITIVE
jest . Zwróć także uwagę, że jeden zbędny został usunięty ze wzoru.(?i)
\?i
\b
Znak
(?i)
jest umieszczony na początku wzoru, aby umożliwić niewrażliwość na wielkość liter. W tym konkretnym przypadku nie jest on nadpisywany później we wzorcu, więc w efekcie w całym wzorcu nie jest rozróżniana wielkość liter.Warto zauważyć, że w rzeczywistości można ograniczyć niewrażliwość na wielkość liter tylko do części całego wzoru. Zatem pytanie, gdzie to umieścić, tak naprawdę zależy od specyfikacji (chociaż w przypadku tego konkretnego problemu nie ma to znaczenia, ponieważ wielkość
\w
liter nie jest rozróżniana.Aby zademonstrować, oto podobny przykład zwijania się ciągów liter, takich jak
"AaAaaA"
po prostu"A"
.Załóżmy teraz, że określimy, że przebieg powinien być zwinięty tylko wtedy, gdy zaczyna się od dużej litery. Następnie musimy umieścić
(?i)
w odpowiednim miejscu:Mówiąc bardziej ogólnie, możesz włączać i wyłączać dowolną flagę we wzorcu, jak chcesz.
Zobacz też
java.util.regex.Pattern
/regex/i
(Pattern.CASE_INSENSITIVE
w Javie) możesz to zrobić/(?i)regex/
/first(?i)second(?-i)third/
/first(?i:second)third/
\b
między a\w
a a\s
)Powiązane pytania
źródło
Jeśli całe wyrażenie nie uwzględnia wielkości liter, możesz po prostu określić
CASE_INSENSITIVE
flagę:źródło
Możesz także doprowadzić swój początkowy ciąg, który zamierzasz sprawdzić pod kątem dopasowania do wzorca, do małych liter. I użyj odpowiednio małych liter w swoim wzorze.
źródło