Sie nicht angeben, wenn Sie zum Anpassen einzelner Strings einen Ausdruck wollen (Pattern#matches(String, CharSequence)
oder String#matches(String)
) oder wenn Sie wollen mehrere Übereinstimmungen in einer Zeichenfolge (Matcher#find()
) zu finden.
einen einzelnen String Matching
Die folgende Verzweigung genommen wird, wenn input
ist -Test oder , aber nicht, wenn es 123-123:
if (input.matches("(?s)(?!\\d+-\\d+).*")) {
// ...
}
Obwohl, wenn Sie Ihren Code macht die tatsächliche matches
Anruf, könnten Sie auch schreiben:
if (!input.matches("\\d+-\\d+")) {
// ...
}
Suche nach Übereinstimmungen in einer Zeichenfolge
Wenn Sie mehrere Übereinstimmungen in einer Zeichenfolge finden möchten, hängt vieles davon ab, wie Sie in Token konvertieren möchten. Hier ist Beispielcode, der alle Leerzeichen getrennte Sequenzen aufgelistet, die nicht der Form sind \d+-\d+
:
Pattern pattern = Pattern.compile("(?<=^|\\s)(?!\\d+-\\d+)\\S+(?=$|\\s)");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
für eine Eingabe von "Test 123-Test 123-123 Test", würde der Ausgang sein:
Test
123
Test
Test
Wenn Sie anders tokenisieren möchten, müssen Sie die Anpassung der Grenze anpassen. Die regulären Ausdrücke von Java haben einen Word-Boundary-Matcher (\b
), aber 123-123 würde nicht als Wort betrachtet, da es einen Bindestrich enthält, der kein Regex-Wort ist.
können Sie '\\ d + (?! - \\ d +)' –
wollen Sie Benutzer einschränken - zu schreiben? –
's.split (" \\ d + - \\ d + ")' –