0

目前我有这个代码:

<?php
if (isset($_GET['id'])) {
$itemid = $_GET['id'];
$search = "$itemid";
$query = ucwords($search);
$string = file_get_contents('http://clubpenguincheatsnow.com/tools/newitemdatabase/items.php');
if($itemid=="")
{
echo "Please fill out the form.";
}
else
{
$string = explode('<br>',$string);
foreach($string as $row)
{
preg_match('/^(\D+)\s=\s(\d+)\s=\s(\D+)\s=\s(\d+)/', trim($row), $matches);
if(strstr($matches[1], $query))
{
echo "<a href='http://clubpenguincheatsnow.com/tools/newitemdatabase/info.php?id=$matches[2]'>";
echo $matches[1];
echo "</a><br>";
}
}
if($matches[1]=="")
{
echo "Item does not exist!";
}
}
}
else {
echo "Item does not exist!";
}
?>

我想知道的是这个部分是什么意思?preg_match('/^(\D+)\s=\s(\d+)\s=\s(\D+)\s=\s(\d+)/', trim($row), $matches);主要/^(\D+)\s=\s(\d+)\s=\s(\D+)\s=\s(\d+)/是我想知道的部分。

另外,我一直遇到的一个问题是我怎样才能让它也使用数字?因为我有另一个包含数据的文件 (http://clubpenguincheatsnow.com/tools/newitemdatabase/items.php) 并且它希望它获取所有内容,甚至是带有数字的名称。

我该怎么做呢?请帮我!任何帮助将不胜感激!

4

4 回答 4

1

代码是一个正则表达式:

/^(\D+)\s=\s(\d+)\s=\s(\D+)\s=\s(\d+)/

代码将使用正则表达式切割字符串 um 片段并放入一个数组 ($matches)

preg_match('/^(\D+)\s=\s(\d+)\s=\s(\D+)\s=\s(\d+)/', trim($row), $matches);

你应该使用代码看得更好

print_r($matches)

要按名称或按项目编号查找,请更改代码

if(strstr($matches[1], $query))

if(isset($matches[1]) && (strstr($matches[1], $query) || $matches[2] == $query) )

您的代码应如下所示...

if (isset($_GET['id'])) {
$itemid = $_GET['id'];
$search = "$itemid";
$query = ucwords($search);
$string = file_get_contents('http://clubpenguincheatsnow.com/tools/newitemdatabase/items.php');
if($itemid=="")
{
echo "Please fill out the form.";
}
else
{
$string = explode('<br>',$string);
foreach($string as $row)
{
preg_match('/^(\D+)\s=\s(\d+)\s=\s(\D+)\s=\s(\d+)/', trim($row), $matches);
if(isset($matches[1]) && (strstr($matches[1], $query) || $matches[2] == $query) )

{
echo "<a href='http://clubpenguincheatsnow.com/tools/newitemdatabase/info.php?id=$matches[2]'>";
echo $matches[1];
echo "</a><br>";
}
}
}
}
else {
echo "Item does not exist!";
}
于 2012-06-09T18:39:40.920 回答
1
/^(\D+)\s=\s(\d+)\s=\s(\D+)\s=\s(\d+)/

此正则表达式将匹配任意数量的非数字字符,然后是空格字符,然后是等号,以此类推。例如,这个

asd = 1 = yh = 23

允许名称中的数字:

/^(\w+)\s=\s(\d+)\s=\s(\w+)\s=\s(\d+)/

要在所有内容中允许数字和字母数字字符:

/^(\w+)\s=\s(\w+)\s=\s(\w+)\s=\s(\w+)/

包括空格和'太:

/^([\w\s']+)\s=\s([\w\s']+)\s=\s([\w\s']+)\s=\s([\w\s']+)/
于 2012-06-09T18:43:36.893 回答
1

那是一个正则表达式。

'^' 匹配字符串的开头。

'\D' 匹配任何不是数字的字符。

'\d' 匹配任何数字。

'\s' 匹配任何空格。

加号表示前一个字符可以出现多次。

所以基本上它会匹配你文件中的所有这些行,除了最后一个逗号。

Blue = 1 = No = 20

该行将匹配正则表达式。

关于你最后一个允许数字的问题,使用这个:

/^(.+)\s=\s(\d+)\s=\s(\D+)\s=\s(\d+)/
于 2012-06-09T18:44:44.703 回答
0

正如 Sena 所说,该代码是一个正则表达式。它正在捕获四个组,它们之间带有“=”。

  1. 第 1 组:(\D+):任何不是数字的字符一次或多次
  2. 第 2 组:(\d+):任何一次或多次为数字的字符
  3. 第 3 组:(\D+):与一个相同
  4. 第 4 组:(\d+):与两个相同。

因此,它将匹配如下内容:a = 1 = bc = 2

所以,它是匹配数字,你想要它做什么?按照上面的建议尝试 print_r($matches) 。

于 2012-06-09T18:47:25.143 回答