87 To może być głupie pytanie, ale nie mogłem go nigdzie znaleźć: Jak mogę użyć operatora wyrażenia regularnego java OR (|) bez nawiasów? np .: Tel | Telefon | Faks java regex Eric Conner źródło Wygląda dobrze, jaki masz problem? danben 1 tak, powinno działać. cletus, danben i ja zgadzamy się. także @danben - nazywam się Dan Beam, lol, tak blisko! Dan Beam, Odpowiedzi: 154 Możesz po prostu użyć samej rury: "string1|string2" na przykład: String s = "string1, string2, string3"; System.out.println(s.replaceAll("string1|string2", "blah")); Wynik: blah, blah, string3 Głównym powodem używania nawiasów jest ograniczenie zakresu alternatyw: String s = "string1, string2, string3"; System.out.println(s.replaceAll("string(1|2)", "blah")); ma ten sam wynik. ale jeśli po prostu to zrobisz: String s = "string1, string2, string3"; System.out.println(s.replaceAll("string1|2", "blah")); dostajesz: blah, stringblah, string3 ponieważ powiedziałeś „ciąg1” lub „2”. Jeśli nie chcesz przechwytywać tej części wyrażenia, użyj ?:: String s = "string1, string2, string3"; System.out.println(s.replaceAll("string(?:1|2)", "blah")); cletus źródło A jeśli muszę oddzielić te ciągi od innych elementów wyrażenia regularnego, które również są ciągami? np. eee (ff | gg) eee Czy muszę używać nawiasów? Eric Conner, Ah nie ważne. Twoja aktualizacja to naprawia. Ostatni przykład jest tym, czego szukałem. Dzięki! Eric Conner,
154 Możesz po prostu użyć samej rury: "string1|string2" na przykład: String s = "string1, string2, string3"; System.out.println(s.replaceAll("string1|string2", "blah")); Wynik: blah, blah, string3 Głównym powodem używania nawiasów jest ograniczenie zakresu alternatyw: String s = "string1, string2, string3"; System.out.println(s.replaceAll("string(1|2)", "blah")); ma ten sam wynik. ale jeśli po prostu to zrobisz: String s = "string1, string2, string3"; System.out.println(s.replaceAll("string1|2", "blah")); dostajesz: blah, stringblah, string3 ponieważ powiedziałeś „ciąg1” lub „2”. Jeśli nie chcesz przechwytywać tej części wyrażenia, użyj ?:: String s = "string1, string2, string3"; System.out.println(s.replaceAll("string(?:1|2)", "blah")); cletus źródło A jeśli muszę oddzielić te ciągi od innych elementów wyrażenia regularnego, które również są ciągami? np. eee (ff | gg) eee Czy muszę używać nawiasów? Eric Conner, Ah nie ważne. Twoja aktualizacja to naprawia. Ostatni przykład jest tym, czego szukałem. Dzięki! Eric Conner,
Odpowiedzi:
Możesz po prostu użyć samej rury:
"string1|string2"
na przykład:
String s = "string1, string2, string3"; System.out.println(s.replaceAll("string1|string2", "blah"));
Wynik:
Głównym powodem używania nawiasów jest ograniczenie zakresu alternatyw:
String s = "string1, string2, string3"; System.out.println(s.replaceAll("string(1|2)", "blah"));
ma ten sam wynik. ale jeśli po prostu to zrobisz:
String s = "string1, string2, string3"; System.out.println(s.replaceAll("string1|2", "blah"));
dostajesz:
ponieważ powiedziałeś „ciąg1” lub „2”.
Jeśli nie chcesz przechwytywać tej części wyrażenia, użyj
?:
:String s = "string1, string2, string3"; System.out.println(s.replaceAll("string(?:1|2)", "blah"));
źródło