【问题标题】:Extract data from string (with default template)从字符串中提取数据(使用默认模板)
【发布时间】:2016-06-29 21:48:29
【问题描述】:

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

我该怎么做?

【问题讨论】:

标签: php regex


【解决方案1】:

对于前三件事,您可以简单地使用一些基本的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

【讨论】:

    【解决方案2】:

    您可以搜索preg_matchregex。这些都是很好的起点。

    【讨论】:

    • 我已经研究过了,但这太让人头疼了。我只是不知道它是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 2017-02-10
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多