2012-09-12 75 views
-1

我有這個字符串在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 

我的目標是因爲它只是垃圾去除值766740。這些值可以有單數,雙數和三位數字。

下一步將剝離字符串中的STEAM_0:1:20130600STEAM_0:1:55386073並將其捕獲到一個新變量中。唯一的常數是STEAM_0:,其餘的可以改變。

我仍在學習正則表達式,但我擔心這對我來說有點複雜。有些指導意見最值得讚賞。

+3

你真的需要詳細說明這個字符串的各個部分是什麼以及它們可以包含什麼。詳細說明這將使你構建正則表達式(或解析模式)的一半。 – lonesomeday

+0

使用代碼表示法 - 「{}」按鈕 - 用於發佈代碼,使其更易於閱讀。另外,如果Steam爲您提供一些API來訪問您的PHP,應該有一個更簡單的方法。 –

+0

數字的位置是否始終是STEAM_0的前一個單詞?如果是這樣的話,你在'\ d {1,3}(?= \ s * STEAM_0)' – Kash

回答

-1
$ 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" 
} 
0

試試這個:與代碼(在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); 
?> 

播放here


  • 正則表達式/\d{1,3}(?=\s*STEAM_0)/i比賽號碼發生在 STEAM_0(積極向前)並取代他們wi th空字符串
  • 正則表達式/STEAM_0[^\s]+/i匹配所有STEAM_0單詞(不區分大小寫)並打印所有匹配的數組 。
相關問題