我在PHP中有这个字符串:
Hopelessly Incredible |SPG:M| 766 STEAM_0:1:20130600 " banned "A
Blatantly Obvious Hacker 740 STEAM_0:1:55386073 " (minutes "0")
(reason "Multi-Hack")
字符串的格式为:
Name1 Number(0-3 digits) Steam_0:x:xxxx offense (banned/kicked/mute etc) Name2 Number(0-3 digits) Steam_0:x:xxxx time reason
我的目标是删除值766
和740
,因为它只是垃圾。这些值可以是一位数、两位数和三位数。
下一步是从字符串中剥离STEAM_0:1:20130600
和STEAM_0:1:55386073
,并将其捕获到一个新的变量中。唯一的常数是STEAM_0:
,其余的都可以改变。
我仍在学习regex,但我担心这对我来说有点复杂。一些指导将不胜感激。
试试这个:(不擅长PHP,但应该很接近,正则表达式应该可以工作)
<?php
$sourcestring='Hopelessly Incredible |SPG:M| 766 STEAM_0:1:20130600 " banned "A Blatantly Obvious Hacker 740 STEAM_0:1:55386073 " (minutes "0") (reason "Multi-Hack")';
$replacedstring = preg_replace('/'d{1,3}(?='s*STEAM_0)/i','',$sourcestring);
echo $replacedstring;
preg_match_all('/STEAM_0[^'s]+/i',$replacedstring,$matches);
echo "<pre>".print_r($matches,true);
?>
在这里玩代码
- Regex
/'d{1,3}(?='s*STEAM_0)/i
匹配之前出现的数字STEAM_0
(正向前瞻)并用空字符串替换它们 - Regex
/STEAM_0[^'s]+/i
匹配所有STEAM_0
单词(不区分大小写),并打印所有匹配项的数组
$ cat scratch.php
<?php
$s = 'Hopelessly Incredible |SPG:M| 766 STEAM_0:1:20130600 " banned "A Blatantly Obvious Hacker 740 STEAM_0:1:55386073 " (minutes "0") (reason "Multi-Hack")';
$s = preg_replace('@'d+ (STEAM_'d:)@', ''1', $s);
preg_match_all('@(STEAM_'d:'d+:'d+)@', $s, $matches);
var_dump($s, $matches[1]);
$ php scratch.php
string(142) "Hopelessly Incredible |SPG:M| STEAM_0:1:20130600 " banned "A Blatantly Obvious Hacker STEAM_0:1:55386073 " (minutes "0") (reason "Multi-Hack")"
array(2) {
[0]=>
string(18) "STEAM_0:1:20130600"
[1]=>
string(18) "STEAM_0:1:55386073"
}