php regex: Come faccio a corrispondere a questo pathing Registro di sistema?
Domanda
Non sono molto bravo con espressioni regolari e sono stato un po graffiare la mia testa su questo. Ho ottenuto il seguente codice PHP utilizzando preg_match che dovrebbe corrispondere tutti i caratteri del pathing Registro tranne per il numero record ... che in questo caso è "record ??]":
<?php
$reg_section = "[HKEY_LOCAL_MACHIN\SOFTWARE\INTERSTAR TECHNOLOGIES\XMEDIUS\CONFIG MANAGER\SYSTEM\COMPANIES\RECORD11]";
$pattern = "/^(\[HKEY_LOCAL_MACHIN\\\SOFTWARE\\\INTERSTAR TECHNOLOGIES\\\XMEDIUS\\\CONFIG MANAGER\\\SYSTEM\\\COMPANIES\\\RECORD(\d+)\])$/";
if ( preg_match($pattern, $reg_section )) {
echo "Found";
} else {
echo "not found";
}
?>
L'errore che ottengo è:
Parse error: syntax error, unexpected T_IF in C:\Inetpub\wwwroot\xfax\regmatch.php on line
5
grazie in anticipo
Soluzione
Si deve sfuggire alla [
troppo:
/^\[HKEY_LOCAL_MACHIN\\SOFTWARE\\INTERSTAR TECHNOLOGIES\\XMEDIUS\\CONFIG MANAGER\\SYSTEM\\COMPANIES\\RECORD(\d+)]$/
In caso contrario, segna l'inizio di una classe di caratteri.
Questo funziona:
$subject = "[HKEY_LOCAL_MACHIN\\SOFTWARE\\INTERSTAR TECHNOLOGIES\\XMEDIUS\\CONFIG MANAGER\\SYSTEM\\COMPANIES\\RECORD11]";
$pattern = "/^\\[HKEY_LOCAL_MACHIN\\\\SOFTWARE\\\\INTERSTAR TECHNOLOGIES\\\\XMEDIUS\\\\CONFIG MANAGER\\\\SYSTEM\\\\COMPANIES\\\\RECORD\\d+\\]$/";
var_dump(preg_match($pattern, $subject));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow