Nie uciec, co nie musi być uciekł:
return expression.matches("[-+*/^]+");
powinno działać dobrze. Większość metaznaków wyrażeń regularnych (.
, (
,, +
, itp.) Traci swoje specjalne znaczenie, gdy jest używana w klasie znaków. Te, na które należy zwrócić uwagę, to: [
, -
, ^
i ]
. I przez ostatnie trzy, można strategicznie umieścić w nich char klasę, żeby nie brać ich szczególne znaczenie:
^
może być umieszczony w dowolnym miejscu z wyjątkiem tuż po nawiasie otwierającym: [a^]
-
mogą być umieszczane zaraz po uchwytu otwierania lub tuż przed wspornikiem zamknięcia: [-a]
lub [a-]
]
może zostać umieszczony zaraz uchwytu otwierania: []a]
Ale w przyszłości, jeśli trzeba to odwrotny ukośnik jako znak ucieczki w regex ciąg, trzeba uciec go dwukrotnie, np:
"\\(.*?\\)" // match something inside parentheses
więc dopasować dosłownego backslash, ty” d potrzeba cztery z nich:
"hello\\\\world" // this regex matches hello\world
Inna uwaga: String.matches()
postara się dopasować całą ciąg przeciwko wzoru, więc jeśli ciąg zawiera tylko kilka podmiotów, musisz użyj zamiast tego użyj czegoś takiego jak .matches(".*[-+*/^].*");
(lub użyj Matcher.find()
)
hah, szykowałam się, że muszę uciec * gdy problem polegał na zamawianiu + - * biorąc pod uwagę zakres "plus za pomocą gwiazdki", a nie " plus lub minus lub gwiazdka ". Dzięki za wyjaśnienie! – WebChemist