2016-04-04 11 views
2

Dies ist mein Code und es funktioniert mit aber nicht mit ^, ich kenne den Grund, aber ich kenne die Lösung nicht.String-Muster auf ^^ [Java]

Dieser Code funktioniert und gibt mir "hier":

String patternString = "(.*)--(.*)"; 

Pattern r = Pattern.compile(patternString); 
Matcher m = r.matcher("here--asdfasdfasdfasdfasdfasdfasfd"); 

Dieser Code nicht gib mir "hier":

String patternString = "(.*)^^(.*)"; 

Pattern r = Pattern.compile(patternString); 
Matcher m = r.matcher("here^^asdfasdfasdfasdfasdfasdfasfd"); 
+0

Das "^" ist ein Ankerzeichen, und Sie müssen es entkommen. – KevinO

+0

'^' ist ein Regex-Ausdruck und muss jedoch mit '\\ ^' – SomeJavaGuy

+0

@KevinEsche entkernt werden, wenn ich \\ setze, bekomme ich die 'no way' nicht' here' –

Antwort

2

ersetzen ^ durch \\^, Das ist ein spezielles Symbol, das den Anfang einer Zeile darstellt, da der Modifikator MULTILINE nicht aktiviert ist. Solche Symbole (\.[]{}()*+-?^$|) müssen mit \\ vor ihnen ausgeblendet werden.

+2

Eigentlich ist hier '^' ein Anfang der Zeichenfolge, da MUTILINE-Modifizierer nicht definiert ist. –

+0

dies erzeugt "keine Möglichkeit" anstelle von "hier" –

+2

https://ideone.com/NORaD5 –

2

Sie müssen beide ^ Zeichen (oder gruppieren sie), sie sind Sonderzeichen in einem regulären Ausdruck. Wenn ich Ihr zweites Beispiel ändern wie,

String patternString = "(.*)\\^\\^(.*)"; 

oder wie

String patternString = "(.*)\\^{2}(.*)"; 

ich bekommen (erwartet) here.