/ Ako uniknúť niektorým znakom z javy - java, regulárny, unikajúci

Ako uniknúť niektorým znakom v java - java, regex, uniknúť

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ď č. 1

Bude 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úť.