-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

私の目標は値を削除することで766あり740、それは単なるゴミであるためです。これらの値には、1 桁、2 桁、3 桁の数字が含まれます。

次のステップは、文字列を取り除きSTEAM_0:1:20130600STEAM_0:1:55386073新しい変数に取り込むことです。唯一の定数はSTEAM_0:で、残りは変更できます。

私はまだ正規表現を学んでいますが、これを行うのは少し複雑だと思います。いくつかのガイダンスは最も感謝しています。

4

2 に答える 2

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);
?>

ここのコードで遊ぶ


  • 正規表現は/\d{1,3}(?=\s*STEAM_0)/i、前に出現する数字と一致し STEAM_0(正の先読み)、それらを空の文字列に置き換えます
  • 正規表現/STEAM_0[^\s]+/iはすべてのSTEAM_0単語 (大文字と小文字を区別しない) に一致し、すべての一致の配列を出力します。
于 2012-09-12T20:41:14.453 に答える
-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"
}
于 2012-09-12T20:39:09.807 に答える