Musím uniknúť postavám ako ^
, .
, [
, ]
, +
a (karty a nové riadky nebudú problémom), zatiaľ čo ostatným sa to páči
*
a ?
.
EDIT = Presnejšie povedané, mám reťazec s týmito znakmi a musím im uniknúť, aby sa nezhodovali s regulárnymi výrazmi. Musím sa predstierať pre každú z týchto postáv, ale individuálne by to vyžadovalo 7 alebo 8 skenov a rád by som to urobil iba jedným priechodom (IE: všetko, čo zodpovedá, je doplnené
)
Ako to urobím?
Vďaka.
odpovede:
5 pre odpoveď č. 1Bude to fungovať?
StringBuilder sb = new StringBuilder();
for (char c : myString.toCharArray())
{
switch(c)
{
case "[":
case "]":
case ".":
case "^":
case "+":
case "\":
sb.append("\");
// intended fall-through
default:
sb.append(c);
}
}
String escaped = sb.toString();
1 pre odpoveď č. 2
K dispozícii je aplikácia: Pattern.quote ()
Uniká všetkému, čo by bolo rozpoznané ako regulárny vzorový jazyk.
0 pre odpoveď č. 3
Ak chcete uniknúť z reťazca, ktorý sa má použiť ako doslovný výraz v regulárnom výraze, ktorý môžete použiť Pattern.quote()
alebo reťazec jednoducho obklopte \Q
a \E
.
0 pre odpoveď č. 4
Q a E a java.util.Pattern.quote()
sú rovnaký prístup.
Tento prístup však funguje iba pre podmnožinu príchutí.
Pozrite sa na nasledujúci odkaz a uvidíte toPodporujú ho 4 z 15 príchutí. Takže je lepšie použiť Grodriguezov prístup, ak potrebujete spustiť svoj regulárny program v niečom inom ako Java, napríklad v javascripte (ktorý používa ECMA).
http://www.regular-expressions.info/refflavors.html
Tu je jeden poťah, ktorý by mohol fungovať.
"text to escape".replaceAll("([\\\[\]\.\^\+])","\\$1");
-1 pre odpoveď č. 5
Urobíte to pomocou predplatenia na znak, ktorému chcete uniknúť.