从字符串中提取数据(使用默认模板)


Extract data from string (with default template)

我使用PHP遇到了一点麻烦,因为我基本上不知道从哪里开始。

我的问题如下:

我有CSGO皮肤名称,如:

★ StatTrak™ Bayonet | Fade (Minimal Wear)
P250 | Modern Hunter (Field-Tested)
Souvenir AUG | Contractor (Factory New)
StatTrak™ Galil AR | Orange DDPAT (Factory New)

现在,我需要一些东西来基本解决以下问题:

Does it contain the star (★)? If so, it's a knife.
Is it StatTrak™?
Is it Souvenir?
The Weapon name (Bayonet, AUG, Galil AR, P250)
The skin name (Contractor, Orange DDPAT, Modern Hunter, Fade)
The wear (Factory New, Battle-Scarred, Field-Tested, Well Worn, Minimal Wear)?

我该怎么做呢?

对于前三种情况,您可以简单地使用一些基本的正则表达式。在这种情况下,它非常简单。例如,如果字符串包含文本"Souvenir",您可以使用/Souvenir/来匹配,并且您可以使用 preg_match() 进行测试。

if (preg_match("/Souvenir/", "Souvenir AUG | Contractor (Factory New)")) 
    echo "It's Souvenir!";

您可以对/StatTrak™//★/应用完全相同的想法。

对于武器名称,您只需注意它在字符串中的位置。如果我们通过"|"吐出字符串,武器总是在文本的第一行。此外,如果有两个单词,武器就是第二个单词,而如果只有一个单词,武器就是那个单词。一般来说,这是最后一个词。下面是一个例子:

$str = "★ StatTrak™ Bayonet | Fade (Minimal Wear)";
$items = explode("|",$str);                           // Split by "|"
$words = array_filter(explode(" ",$items[0]));        // Split first text by space
$weapon = $words[sizeof($words)-1];                   // Get last word in text
echo $weapon;

皮肤名称是类似的,在这种情况下,它是"|"之后的第二行文本,但不包括括号内的项目。要从字符串中删除带括号的文本,请参阅此问题。

最后的磨损是"|"之后的第二行文本,是括号内的文本。

查看括号内的文本内容。

可以搜索preg_matchregex