Проблемы сопоставления строки с регулярным выражением

Я создаю программное обеспечение для интрасети и для определения номера комнаты и компьютера, на котором находится компьютер, я использую массив серверов REMOTE_HOST.

Вот мой код:

$hostname = $_SERVER['REMOTE_HOST'];
//Check to see if the computer name is compatible with room auto-detect
if (preg_match("/G|F\d{1,2}-.*?-PC\d{1,2}.*?/i", $hostname)) {
    $room = explode("-", $hostname);
    $pc = explode(".", $room[2]);
} else {
    $pc[0] = "NA";
    $room[0] = "other";
}

Эта оценка должна быть истинной, если имена компьютеров выглядят примерно так:

  • g22-dell-pc23.roundhay.local
  • f48-lenovo-pc02.roundhay.local
  • g6-asus-pc18.roundhay.local

Если оператор не такой, как указано выше, он должен вернуть массив комнаты и ПК в NA и Other.

Я могу извлечь номер комнаты и компьютер успешно, но когда компьютер с нестандартным именем использует программное обеспечение, он все еще пытается извлечь информацию, и программное обеспечение не удается, потому что у него нет информации, чтобы продолжить работу.

Например:

g22-smartboard.roundhay.local

Программное обеспечение все еще пытается получить номер ПК, даже если он не соответствует моему регулярному выражению. Однако на моем тестовом ПК с именем JOSH-PC он возвращается к информации по умолчанию.

Я проверил свое регулярное выражение, и оно кажется верным всякий раз, когда имя начинается с буквы G или F.

Мне нужно, чтобы он соответствовал конкретно этим требованиям:

  • Первая буква G или F
  • Тогда одна или две цифры от 0 до 9
  • Затем -
  • Тогда любое количество букв А-Я
  • Затем -
  • Тогда буквы ПК
  • Тогда одна или две цифры от 0 до 9
  • Тогда что-нибудь

Я попробовал все виды, чтобы заставить это работать, но я просто не понимаю регулярное выражение правильно. Я искал это, но это просто слишком запутанно.

2 ответа

Решение

Регулярное выражение:

/[g|f]\d{1,2}-[a-z]+-pc\d{1,2}.+/i

Должно сработать. Я использую http://gskinner.com/RegExr/ для создания выражений.

Попробуйте это RegEx [G|F]\d{1,2}-[a-z]+-pc\d{1,2}.+

Также отличным ресурсом для регулярных выражений является http://gskinner.com/RegExr/

Другие вопросы по тегам