2016-04-13 14 views
1

ich ein Java regelmäßig ausdr will *TA*T/N, anzupassen, *TI, *TA/O, *TI/O, *TA/N und *TI/N soll aber *T nicht akzeptieren. Die folgenden regulären AusdruckJava Regulärer Ausdruck unerwünschte Matchings zu beschränken

String pattern="\\*T[AI]?(/N|/O)?"; 

ist passend zu den Bedingungen alle, aber seine *T auch passend. Wie kann ich verhindern, dass es auch *T abgleicht?

+3

Bitte formatieren Sie Ihre Frage neu und geben Sie uns Beispieleingaben und erwartete Ausgaben. –

+0

Wenn ich Ihre Frage richtig verstanden habe, dann haben Sie einen festen Satz gültiger Eingaben. Ist es in diesem Fall wirklich notwendig, gegen eine Regex zu prüfen? Vielleicht ist eine Reihe von zu überprüfenden Konstanten einfacher, wartungsfreundlicher und sogar leistungsfähiger. – grange

Antwort

1

Ohne weitere Details, es scheint, dass Sie eine positive Vorschau sicherstellen können mindestens 2 erlaubten Zeichen sind nach *T:

String pattern = "\\*(?=[TAI/]{2})T[AI]?(?:/[NO])?"; 

das Sehen regex demo

Die (?=[TAI/]{2}) positive Vorschau wird sicherstellen, Es gibt 2 Zeichen nach *, entweder T, A, I oder /.

+1

Vielen Dank Wiktor! Dieser Ausdruck beschränkt * T und akzeptiert * T/N, * TA, * TI, * TA/O, * TI/O, * TA/N und * TI/N. –

+0

Ich bin froh zu helfen. Bitte überlegen Sie, die Antwort zu akzeptieren (siehe [So akzeptieren Sie SO Antworten] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)) –