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

时间:2016-06-29 21:48:30

标签: php regex

我在使用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)?

我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

对于前三件事,您可以简单地使用一些基本的regular expressions。在这种情况下,它非常简单。例如,如果字符串包含文本/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;

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

最后,磨损是"|"之后的第二行文本,是括号内的文本。要确定括号内的文本内容,请参阅this question

答案 1 :(得分:-1)

您可以搜索preg_matchregex。这些都是开始的好点。