php regex: Как мне сопоставить этот путь реестра? - PullRequest
0 голосов
/ 21 февраля 2009

Я не очень хорошо разбираюсь в регулярных выражениях, и я вроде как почесал голову над этим. Я получил следующий php-код, используя preg_match, который должен соответствовать всем символам в пути реестра, за исключением номера записи ... который в данном случае "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"; 
}

?> 

Я получаю ошибку:

Parse error: syntax error, unexpected T_IF in C:\Inetpub\wwwroot\xfax\regmatch.php on line 5

заранее спасибо

1 Ответ

3 голосов
/ 21 февраля 2009

Вы должны сбежать от [:

/^\[HKEY_LOCAL_MACHIN\\SOFTWARE\\INTERSTAR TECHNOLOGIES\\XMEDIUS\\CONFIG MANAGER\\SYSTEM\\COMPANIES\\RECORD(\d+)]$/

В противном случае он отмечает начало класса символов.

Это работает:

$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));
...