我的文字文件包含这样的文字
A8-30-AD (hex) WEIFANG GOERTEK ELECTRONICS CO.,LTD
A830AD (base 16) WEIFANG GOERTEK ELECTRONICS CO.,LTD
Wei fang Export processing Zone
Wei Fang Shan Dong 261205
CN
D8-68-C3 (hex) Samsung Electronics Co.,Ltd
D868C3 (base 16) Samsung Electronics Co.,Ltd
#94-1, Imsoo-Dong
Gumi Gyeongbuk 730-350
此文件包含所有mac地址及其供应商。 我想搜索到这个文件,如果行包含我搜索的mac地址我希望得到它的供应商 例如,如果我搜索
A8:30:AD
mac地址到此文件中它将返回
潍坊高尔特电子有限公司
所以我只想找到找到(hex)字符串的供应商名称 我怎么能用PHP
来做到这一点答案 0 :(得分:0)
您的文件包含内容
的行key [space](type)[space] name
你想要好吗"名字"通过"键"
所以你可以使用preg-match-all()http://php.net/manual/ru/function.preg-match-all.php这样的模式来搜索所需的行
/ ^ $搜索\ S + \(。*?\)\ S +(。*)?\ $ /米
如果你想按键的一部分进行搜索,可以将键包裹在"。*?"
/^.*?$搜索范围。*?\ S + \(。*?\)\ S +(。*)?\ $ /米
因为文件中包含的内容只有字母和数字,所以你可以通过
来清除你的搜索内容/ \ W + /
并仅按这些行搜索
所以你编码
$search='A8:30:AD'; // search string;
$filename='data.txt'; // name of file with data
$search=preg_replace('/\W+/','',$search); // clear search, remove non-letters and non-digits
$filecontent = file_get_contents($filename);
$pattern = "/^$search\s+\(.*?\)\s+(.*)?\$/m"; //build the pattern
if(preg_match_all($pattern, $filecontent, $matches)){ // if found
// print_r($matches[1]); // show found array with all matches
echo $matches[1][0]; // show only first found
} else {
echo "nothing found";
}
你会得到
潍坊高尔特电子有限公司
按部分"键"进行搜索使用这个
$pattern = "/^.*?$search.*?\s+\(.*?\)\s+(.*)?\$/m"; //build the pattern
答案 1 :(得分:0)
最简单的方法是读取文件并解析它,将mac地址和相应的供应商收集到一个数组中,并将mac地址行作为键。像$arr = ['mac-address1' => 'vedor1', ....]
这样的东西。所以我们这样做
function getMacAddressVendor(string $mac_address) {
static $database = NULL;
if (is_null($database)) {
$database = [];
$handle = fopen('path to file', 'r');
while ($line = fgets($handle)) {
$matches = []; //we capture stuffs into this array
$line = trim($line);
//mac addresses are hexadecimals that may contain colon or dash
if (preg_match('/^([A-E0-9\-:]+)\s+\([^)]+\)\s+(.+)$/i', $line, $matches) {
$database[strtoupper($matches[1])] = $matches[2];
}
}
fclose($handle);
}
return array_key_exists(strtoupper($mac_address), $database)? $database[$mac_address] : '';
}
$vendor = getMacAddressVendor('A8:30:AD');