Originariamente inviato da -MaVeRiK86-
Potresti invece aiutarmi a stendere la sola espressione che controlli che il campo sia in quel formato che ho scritto?
Faccio l'esempio di String|int. Il primo accetta lettere/numeri/spazi/tabulazioni. Il secondo accetta 4 digit (come nel caso 1900-2100).

String strPattern = "[a-zA-Z0-9 \\t]+\\|(\\d{4})";

Nota la "classe" di caratteri racchiusa tra [ ] con il + che segue che vuol dire "uno o più". Nota il \\| (il pipe è speciale, va fatto l'escape se vuoi proprio matchare un pipe!) e nota il "gruppo" racchiuso tra ( ) per i 4 digit.

Prima crei un java.util.regex.Pattern, compilando la regex, poi usi java.util.regex.Matcher e in particolare il suo matches(). Se ti dice true, il formato corrisponde e quindi puoi invocare group(1) di Matcher per prendere il testo matchato dal gruppo 1 (quello dei 4 digit).