Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

322
Visualizações
Desinfecte el número de teléfono: la expresión regular coincide con todo, excepto que la primera aparición está en la primera posición

con respecto a esta publicación "https://stackoverflow.com/questions/35413960/regular-expression-match-all-except-first-occurence" me pregunto cómo encontrar la primera ocurrencia en una cadena solo si comienza con un carácter específico en PHP.

Me gustaría desinfectar los números de teléfono. Ejemplo de número de teléfono incorrecto:

 +49+12423#23492@aosd#+dasd

Regex para eliminar todos los "+" excepto la primera aparición.

 \G(?:\A[^\+]*\+)?+[^\+]*\K\+

Problema: debe eliminar cada "+" solo si comienza con "+", no si la primera posición de ocurrencia es mayor que 1.

La expresión regular para eliminar todo excepto los números es fácil:

 [^0-9]*

Pero no sé cómo combinar esos dos dentro de una expresión regular. Simplemente usaría preg_replace() dos veces.

Por supuesto, podría usar una solución como if ($str[0] === '+') {...} pero prefiero aprender algunas cosas nuevas (regex :)

Gracias por ayudar.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Puedes usar

 (?:\G(?!\A)|^\+)[^+]*\K\+

Vea la demostración de expresiones regulares . Detalles :

  • (?:\G(?!\A)|^\+) - ya sea el final de la coincidencia exitosa anterior o un + al comienzo de la cadena
  • [^+]* - cero o más caracteres que no sean +
  • \K - operador de restablecimiento de coincidencia descartando el texto coincidente hasta el momento
  • \+ - un + carácter.

Vea la demostración de PHP :

 $re = '/(?:\G(?!\A)|^\+)[^+]*\K\+/m'; $str = '+49+12423#23492@aosd#+dasd'; echo preg_replace($re, '', $str); // => +4912423#23492@aosd#dasd
over 4 years ago · Santiago Trujillo Relatório

0

Parece que desea combinar las dos consultas:

Una expresión regular para eliminar todo excepto los números

Una expresión regular para eliminar todos los "+" excepto la primera aparición

Aquí están mis dos centavos:

 (?:^\+|\d)(*SKIP)(*F)|.

Reemplazar lo que se empareja con nada. Aquí hay una demostración en línea


  • (?:^\+|\d) - Un grupo sin captura para hacer coincidir un literal inicial más o cualquier dígito en el rango de 0-9.
  • (*SKIP)(*F) - Consume los caracteres coincidentes anteriores y falla en el resto del resultado coincidente.
  • | - O:
  • . - Cualquier carácter único que no sea nueva línea.

Me gustaría pensar que esta es una ligera adaptación de lo que algunos consideran "El mejor truco de expresiones regulares" , en el que uno intentaría primero hacer coincidir lo que no desea y luego usar una alternancia para hacer coincidir lo que sí desea. Con el uso de los verbos de control de retroceso (*SKIP)(*F) invertimos la lógica. Primero hacemos coincidir lo que queremos , lo excluimos de los resultados y luego hacemos coincidir lo que no queremos.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda