我正在创建一些内部网软件,为了确定计算机所在的房间号和PC号,我使用REMOTE_HOST服务器数组。
下面是我的代码:$hostname = $_SERVER['REMOTE_HOST'];
//Check to see if the computer name is compatible with room auto-detect
if (preg_match("/G|Fd{1,2}-.*?-PCd{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
如果语句不是如上所述,则需要将room和pc数组还原为NA和Other。
我可以成功提取房间号码和PC,但当具有非标准名称的PC使用该软件时,它仍然试图提取信息,软件失败,因为它没有信息可继续。
例如:g22-smartboard.roundhay.local
软件仍然试图获得PC号码,即使它不匹配我的正则表达式。但是,在我的测试PC上,计算机名称为JOSH-PC,它确实会恢复到默认信息。
我已经测试了我的正则表达式,无论名称以G或f开头,它似乎都是正确的
我需要它特别符合这些要求:
- 首字母为G或F
- 0 - 9中的一个或两个数字
- 则a -
- 然后任意数量的字母a-z
- 则a -
- 然后字母PC
- 0 - 9中的一个或两个数字
- 然后任何
我已经尝试了各种各样的工作,但我只是不理解正则表达式正确。
正则表达式
/[g|f]d{1,2}-[a-z]+-pcd{1,2}.+/i
应该工作。我使用http://gskinner.com/RegExr/构建表达式
试试这个RegEx [G|F]d{1,2}-[a-z]+-pcd{1,2}.+
还有一个很好的regex资源是http://gskinner.com/RegExr/