1

我正在创建一些 Intranet 软件并确定计算机所在的房间号和 PC 号,我正在使用 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

如果语句与上述不同,则需要将房间和 pc 数组恢复为 NA 和其他。

我可以成功提取房间号和 PC,但是当一台具有非标准名称的 PC 使用该软件时,它仍然会尝试提取信息并且该软件失败,因为它没有信息可以继续。

例如:

g22-smartboard.roundhay.local

该软件仍会尝试获取 PC 号码,即使它与我的正则表达式不匹配。但是,在我的计算机名称为 JOSH-PC 的测试 PC 上,它确实会退回到默认信息。

我已经测试了我的正则表达式,每当名称以 G 或 F 开头时,它似乎都是正确的。

我需要它专门匹配这些要求:

  • 第一个字母是 G 或 F
  • 然后是 0 - 9 的一位或两位数字
  • 然后 -
  • 然后任意数量的字母 az
  • 然后 -
  • 然后是字母 PC
  • 然后是 0 - 9 的一位或两位数字
  • 然后什么

我已经尝试了各种方法来让它工作,但我只是不正确理解正则表达式。我已经查过了,但它太令人困惑了。

4

2 回答 2

1

正则表达式:

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

应该管用。我使用http://gskinner.com/RegExr/来构建表达式。

于 2013-03-05T19:41:07.590 回答
1

试试这个正则表达式[G|F]\d{1,2}-[a-z]+-pc\d{1,2}.+

正则表达式的一个很好的资源是http://gskinner.com/RegExr/

于 2013-03-05T19:41:09.483 回答