Dado que tengo
KsKd2s4dAs =AhAd2s4dKs =AsAd2s4dKs 5s5d6s6d2c AsAd6s6d2c =AdQdKdJdTd =AhQhKhJhTh =AsQsKsJsTs
Quiero hacer coincidir todas las subcadenas que comienzan con '=' y concatenarlas con este signo.
La salida debe ser
KsKd2s4dAs AhAd2s4dKs=AsAd2s4dKs 5s5d6s6d2c AsAd6s6d2c AdQdKdJdTd=AhQhKhJhTh=AsQsKsJsTs
Puedo capturar usando esta expresión regular (=.{10}\s?)+
pero no puedo encontrar una manera conveniente de hacer tal cadena.
Puedes usar
preg_replace('~(?:\G(?!\A)\s+(?==)|(?<!\S)=)(\S+)~', '$1', $text)
Vea la demostración de expresiones regulares . Detalles :
(?:\G(?!\A)\s+(?==)|(?<!\S)=)
- ya sea a =
char al comienzo de la cadena o justo después de un espacio en blanco o al final de la coincidencia anterior y luego uno o más espacios en blanco seguidos de a =
char(\S+)
- Grupo 1: uno o más caracteres sin espacios en blanco. Otra forma es usar preg_replace_callback
:
$text = 'KsKd2s4dAs =AhAd2s4dKs =AsAd2s4dKs 5s5d6s6d2c AsAd6s6d2c =AdQdKdJdTd =AhQhKhJhTh =AsQsKsJsTs'; echo preg_replace_callback('~=(\S+(?:\s+=\S+)*)~', function($m) { return preg_replace('~\s+~', '', $m[1]); }, $text);
Vea la demostración de PHP y la demostración de expresiones regulares .
El =(\S+(?:\s+=\S+)*)
coincide con un =
y luego captura en el Grupo 1 uno o más espacios que no son espacios en blanco seguidos de cero o más repeticiones de uno o más espacios en blanco, =
, y uno o más no espacios en blanco.