Mas regex

"^(?:[0-9]{1,9}\,[0-9]{1,2} | [0-9]{1,9})$"

Validacion del siguiente numero:
– en la parte entera de 1 a 9 digitos, empezando por el 0.
– en la parte decimal, de 0 a dos digitos.
– se permite solo parte entera.

(?:(\d|[1-9]\d|100) | ((\d|[1-9]\d|99)\,[0-9]{1,2}) | (100,00))$

Validacion del siguiente numero:
– Número entre 0 y 100,00
– los numeros dentro de este rango pueden contener 2 decimales separados por una coma.

^d+[,]?d+$

Validacion de un numero con coma(,) como separador de decimales. Puede o no contener coma

Editor para probar tus regex.
Editor para probar tus javascripts.

Mas regex

Java regular expression examples

Tengo un problema con unos servicios web que me devuelven mal el xml. Cree un Interceptor para ponerlo bien. Pero es que son tan cachondos los del lado del servidor que la premisa me va cambiando.
Error inicial: axis2ns104:Server
Siguiente vez: axis2ns105:Server

Solucion Regex:

.*(axis2ns)(\d{4}|\d{3}|\d{2}|\d{1}):Server.*"
.*(axis2ns)([0-9]{4}|[0-9]{3}|[0-9]{2}|[0-9]{1}):Server.*
	public static final String EXAMPLE_TEST = "<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault><faultcode xmlns:axis2ns105="http://schemas.xmlsoap.org/soap/envelope/">" +
			"axis2ns105:Server</faultcode><faultstring>0229 La petición ya ha sido tramitada</faultstring><detail><Atributos xmlns="http://www.map.es/scsp/esquemas/V2/soapfaultatributos"><IdPeticion>00000207</IdPeticion><TimeStamp>2014-02-24T16:37:04.967+01:00</TimeStamp><NumElementos>1</NumElementos><Estado><CodigoEstado>0229</CodigoEstado><CodigoEstadoSecundario /><LiteralError>La petición ya ha sido tramitada</LiteralError><TiempoEstimadoRespuesta>0</TiempoEstimadoRespuesta></Estado><CodCertificado>CDISFWS01</CodCertificado></Atributos></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>";
	public static void main(String[] args) {
		System.out.println(EXAMPLE_TEST.matches(".*(axis2ns)(\d{4}|\d{3}|\d{2}|\d{1}):Server.*"));
		System.out.println(EXAMPLE_TEST.matches(".*(axis2ns)([0-9]{4}|[0-9]{3}|[0-9]{2}|[0-9]{1}):Server.*"));
	}

Asi es como queda en mi interceptor. Con el codigo de antes simplemente sabemos que existe una coincidencia. Pero no sabemos cual. Con el siguiente codigo, descubrimos las posibles coincidencias y transformamos la cadena.

	if((currentEnvelope != null) && (currentEnvelope.matches(".*(axis2ns)(\d{4}|\d{3}|\d{2}|\d{1}):Server.*"))){
		Pattern MY_PATTERN = Pattern.compile("(axis2ns)(\d{4}|\d{3}|\d{2}|\d{1})");
		Matcher m = MY_PATTERN.matcher(currentEnvelope);
		String res = "";
		while (m.find()) {
			res= m.group();
		}
		if( ! res.equals("")){
			LOGGER.info("Debido a un bug en el mensaje SoapFault de este servicio. se procede a cambiar la etiqueta ""+res+"" por "soapenv".");
			currentEnvelope = currentEnvelope.replace(res, "soapenv");
		}
	}

Mirando por internet Vogella tiene un error, desde mi punto de vista. En un momento de su tutorial dice que

 // returns true if the string contains a number less then 300
  public boolean isLessThenThreeHundret(String s){
    return s.matches("[^0-9]*[12]?[0-9]{1,2}[^0-9]*");
  }

yo digo que eso esta mal que es:

 // returns true if the string contains a number less then 300
  public boolean isLessThenThreeHundret(String s){
    return s.matches("[012]{1}[0-9]{1,2}");
  }
Java regular expression examples