Originariamente inviato da -MaVeRiK86-
Se io invece volessi espanderla per controllare l'intera stringa, ossia
String|String|int|int|int|String
String strPattern = "[a-zA-Z0-9 \\t]\\|[a-zA-Z0-9 \\t]\\|(\\d{*})(\\d{*})(\\d{*})\\[a-zA-Z0-9 \\t]";
Devo aver scritto una cavolata immane..
È sbagliata sia a livello tecnico della espressione sia come significato della espressione (che non fa quello che vorresti).
Io nel mio esempio ho messo [a-zA-Z0-9 \\t]+, vedi il + finale? Tu già questo non l'hai messo. Poi hai messo {*} ed è sbagliato. Se vuoi "uno o più digit", allora basta \\d+.
I "quantificatori" con { } sono solo in una delle forme:
codice:
X{n} X, exactly n times
X{n,} X, at least n times
X{n,m} X, at least n but not more than m times
dove n e m sono numeri, come ripeto non puoi mettere *.
Infine non hai messo il match del pipe | tra i 3 int e alla fine hai messo un \\[ che non è quello che volevi sicuramente.
E un suggerimento finale: quando la regex è lunga/complessa, ti conviene spezzarla in più String semplici e poi concatenarli.
codice:
final String wordExpr = "[a-zA-Z0-9 \\t]+";
final String pipeExpr = "\\|";
final String intExpr = "(\\d+)";
String tuaExpr = wordExpr + pipeExpr + ..........;