es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for 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:

    preg_match_all('/\/([1-9]|[12]\d|3[0-1])/', $str, $matches);
    

    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 31

    Por lo tanto, el regex captura cualquier número que siga a la barra diagonal hacia adelante que esté entre 1 y 31, inclusive.

Comments are closed.