chiedo se qualcuno là fuori può far luce sul motivo per cui la seguente espressione regolare non riesce quando viene utilizzato nella funzione preg_match di PHP: -"preg_match(): Compilazione non riuscita: parentesi senza eguali" in PHP testo valido
<?php
$str = '\tmp\phpDC1C.tmp';
preg_match('|\\tmp\\([A-Za-z0-9]+)|', $str, $matches);
print_r($matches);
?>
Ciò risulta nel messaggio di errore "preg_match(): Compilazione non riuscita: parentesi non corrispondenti" nonostante il motivo sia valido. L'ho provato con uno strumento online PHP Regular Expression tester e lo strumento Linux Kiki. Sembra che PHP stia sfuggendo alla parentesi di apertura piuttosto che alla barra retroversa.
Ho risolto il problema utilizzando str_replace per scambiare i backslash per quelli in avanti. Questo funziona per la mia situazione, ma sarebbe bello sapere perché questa espressione regolare sta fallendo.
E 'racchiuso tra virgolette singole, è davvero necessario per scappare due volte? – Zombaya
Ben fatto, mi ricorda alcuni regex pazzi che ho usato in passato, ad es. 'sed/\\\\\\\\\\\\' o qualcosa del genere. – Petah
@Zombaya: Sì, ma solo se si tratta di un vero backslash letterale che stai tentando di codificare. –