Tengo problemas al tratar de escribir un patrón de coincidencia PHP Regex para hacer coincidir y dividir la cadena en los grupos necesarios.
Esta es la situación... Tengo múltiples cadenas con contactos:
+35 00000000, info@company.com, www.company.com
Esto me daría:
Grupo 1: +35 00000000, info@company.com, www.company.com
+35 00000000, +360000000, info@company.com, www.company.com
Esto me daría:
Grupo 1: +35 00000000
Grupo 2: +36 00000000, info@company.com, www.company.com
info@company.com, www.company.com
Esto me daría:
Grupo 1: info@empresa.com, www.empresa.com
+35 00000000, info@company1.com, www.company1.com, +36 00000000, info@company2.com, www.company2.com
Esto me daría:
Grupo 1: +35 00000000, info@company1.com, www.company1.com
Grupo 2: +36 00000000, info@company2.com, www.company2.com
Como puede ver, estas cadenas pueden ser diferentes. Lo que debo hacer es dividir esas cadenas en grupos de contactos, que:
Entonces, al principio traté de hacer coincidir los grupos que comenzaban con el número de teléfono y terminaban con el sitio web:
((\+?[\d ]+)?(, )?(.*)(, )?(www\.\w+\.\w{2,})?)Pero esto no coincide exactamente. También intenté simplificar todo lo relacionado con los grupos de coincidencias de hormigas que comienzan con números de teléfono:
(\+[\d ]+).*Pero esto coincide con cadenas completas.
Tengo que decir que soy un gran novato con respecto a Regex. Me las arreglo para hacer coincidencias básicas, pero esto es demasiado difícil para mí.
La duración del patrón o el bajo rendimiento no son importantes, ya que será una ejecución única.
Puedes obtener las coincidencias usando:
(?:\+?\d+(?:\h+\d+)*,\h*)?[^\s@]+@[^\s@,]+,\h*www\.\S+|\+?\d+(?:\h+\d+)*El patrón coincide:
(?:\+?\d+(?:\h+\d+)*,\h*)? Haga coincidir un + opcional y luego dígitos con espacios opcionales[^\s@]+@[^\s@,]+ Coincide con un patrón similar a un correo electrónico que solo coincide con una sola @,\h*www\.\S+ Coincide con a , seguido de www. y 1+ caracteres que no sean espacios en blanco| O\+?\d+\h*\d+ Coincide con el número de teléfono como patrónDemostración de expresiones regulares
O hacer coincidir ambas formas para la URL y la dirección de correo electrónico usando una alternancia |
(?:\+?\d+(?:\h+\d+)*,\h*)?(?:[^\s@]+@[^\s@,]+,\h*www\.\S+|\h*www\.\S+,\h*[^\s@]+@[^\s@,]+)|\+?\d+(?:\h+\d+)*Puede obtener las coincidencias con los grupos esperados usando
(?=[^\s,])(\+?\d(?:[\d\s]*\d)?)?(?:(?:,\s*)?(\S+@\S+)\b)?(?:(?:,\s*)?(www\.\S+)\b)?Vea la demostración de expresiones regulares .
Tenga en cuenta que (?=[^\s,]) búsqueda anticipada se usa para evitar la coincidencia de cadenas vacías.
Detalles :
(?=[^\s,]) - el siguiente carácter debe ser un carácter que no sea una coma y un espacio en blanco(\+?\d(?:[\d\s]*\d)?)? - un Grupo 1 opcional: un + opcional, un dígito y luego una ocurrencia opcional de cero o más dígitos y espacios en blanco y luego un dígito(?:(?:,\s*)?(\S+@\S+)\b)? - una ocurrencia opcional de(?:,\s*)? - una ocurrencia opcional de una coma y cero o más espacios en blanco(\S+@\S+)\b - Grupo 2: uno o más espacios que no son en blanco, @ , uno o más espacios que no son en blanco, un límite de palabra(?:(?:,\s*)?(www\.\S+)\b)? - una ocurrencia opcional de(?:,\s*)? - una ocurrencia opcional de una coma y cero o más espacios en blanco(www\.\S+)\b - Grupo 3: www. , uno o más espacios que no sean en blanco, límite de palabra.