Expresión regular para 1 o 2 caracteres después de la barra:
Tengo una lista de direcciones IP en notación CIDR en un script de php como sigue:
$str .= '123.23.23.4/17,';
$str .= '123.23.23.4/23,';
$str .= '123.23.23.4/8,';
$str .= '123.23.23.4/18';
Estoy tratando de obtener todos los números después de la barra diagonal. El rango posible es 1-31. A partir de los ejemplos que encontré aquí, intenté lo siguiente:
preg_match_all("//[1-3][0-9]/", $str, $matches);
Lo que dio como resultado:
/17
/23
/18
Luego intenté:
preg_match_all("/\/[1-31]{1,2}/", $str, $matches);
/1
/23
/1
Entonces, la /8 es omitida en ambos casos y el segundo devuelve el número incorrecto. ¿Puede alguien proporcionar el comando correcto para hacer esto, por favor?
davy.ai
Para igualar todos los números después de la barra en las direcciones IP de notación CIDR dadas, puedes utilizar el siguiente comando regex:
Esto debería coincidir con todos los números entre 1 y 31 después de la barra en la cadena dada, incluyendo el 8 en este caso.
Explicación del regex:
–
/
– coincide con el carácter de barra diagonal hacia adelante–
([1-9]|[12]\d|3[0-1])
– este es un grupo de captura, que coincide con cualquier número entre 1 y 31:–
[1-9]
– coincide con cualquier dígito del 1 al 9–
[12]\d
– coincide con cualquier número de dos dígitos que comience con 1 o 2 (es decir, 10, 11, 12, 13, …, 29), usando el comando abreviado\d
para cualquier dígito–
3[0-1]
– coincide con los números 30 a 31Por lo tanto, el regex captura cualquier número que siga a la barra diagonal hacia adelante que esté entre 1 y 31, inclusive.