import java.util.regex.Matcher;
import java.util.regex.Pattern;

class RegexTest {

    /* Validação. */
    public static final Pattern PADRAO = Pattern.compile(
            "^[([\\p{L}&&[\\p{IsLatin}]]|0-9| |'|-]+$");

    /* Testes positivos. */
    public static String[] positivos = {
            "á é í ó ú",
            "ã ẽ ĩ õ ũ",
            "Á È Ĩ Ã ó",
            "aeiou",
            "abc def ghi",
            "um 23 45",
            "Um - 2 - tres quatro",
            "Um' 2  três' quatro",
            "maçã",
            "Â Ê Î ô û",
            "á Ae Éi Ĩô O",
            "O rato roeu a roupa do rei de Roma",
            "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙäëïöüÄËÏÖÜâêîôûÂÊÎÔÛãẽĩñõũÃẼĨÑÕŨçÇ"
    };

    /* Testes negativos. */
    public static String[] negativos = {
            ".",
            "*",
            "/",
            "<",
            "≃",
            "^",
            "~",
            "()",
            "#",
            "中国"
    };

    public static void main(String[] args) {
        for (final String s : positivos) {
            boolean b = isValid(s);
            System.out.println(b + (b ? " ok - " : " oops - ") + s);
        }
        for (final String s : negativos) {
            boolean b = isValid(s);
            System.out.println(b + (b ? " oops - " : " ok - ") + s);
        }
    }

    public static boolean isValid(final String string) {
        return PADRAO.matcher(string).matches();
    }
}