PHP preg_match的含义和问题

时间:2012-06-09 18:22:06

标签: php scripting preg-match

目前我有这段代码:

<?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 个答案:

答案 0 :(得分: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!";
}

答案 1 :(得分: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']+)/

答案 2 :(得分:1)

这是一个正则表达式。

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

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

'\ d'匹配任何数字。

'\ s'匹配任何空格。

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

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

Blue = 1 = No = 20

该行与正则表达式匹配。

关于您允许号码的最后一个问题,请使用:

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

答案 3 :(得分:0)

Sena所说的代码是一个正则表达式。它正在捕获四组,其中包含“=”。

  1. 第1组:(\ D +):任何不是数字一次或多次的字符
  2. 第2组:(\ d +):任何数字一次或多次的字符
  3. 第3组:(\ D +):与一个
  4. 相同
  5. 第4组:(\ d +):与2相同。
  6. 所以,它会匹配如下:a = 1 = bc = 2

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