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

せなさんの言うとおり、コードは正規表現です。「=」で区切られた 4 つのグループをキャプチャしています。

  1. グループ 1: (\D+) : 1 回以上数字ではない任意の文字
  2. グループ 2: (\d+) : 1 回以上数字である任意の文字
  3. グループ 3: (\D+) : 1 つと同じ
  4. グループ 4: (\d+) : 2 つと同じ。

したがって、次のように一致します: a = 1 = bc = 2

それで、それは数字のマッチングですが、何をしたいですか?上記の提案に従って print_r($matches) を試してください。

于 2012-06-09T18:47:25.143 に答える