Se pregunta si alguien por ahí puede arrojar alguna luz sobre por qué está fallando cuando se utiliza la siguiente expresión regular en función preg_match de PHP: -"preg_match(): Compilación falló: paréntesis incomparables" en PHP para el patrón válido
<?php
$str = '\tmp\phpDC1C.tmp';
preg_match('|\\tmp\\([A-Za-z0-9]+)|', $str, $matches);
print_r($matches);
?>
Esto da como resultado el mensaje de error "preg_match(): Compilación fallida: paréntesis no coincidentes" a pesar de que el patrón parece ser válido. Lo probé con un PHP Regular Expression tester en línea y la herramienta de Linux Kiki. Parece que PHP está escapando del paréntesis de apertura en lugar de la barra invertida.
Ya solucioné el problema utilizando str_replace para cambiar las barras diagonales inversas por las reenviadas. Esto funciona para mi situación, pero sería bueno saber por qué esta expresión regular está fallando.
Está encerrado entre comillas simples, ¿es realmente necesario para escapar dos veces? – Zombaya
Bien hecho, me recuerda a algunos regexe locos que he usado en el pasado, p. 'sed/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ' – Petah
@Zombaya: Sí, pero solo si se trata de una barra diagonal inversa real que está intentando codificar. –