2017-01-09 2 views
0
|affffc100|Hitem:bb:101:1:1:1:1:48:-30:47:18:5:2:6:6:0:0:0:0:0:0:0:0|h[Subject Name]|h|r 

いつもプリントアウト変数がPHP正規表現で置き換えると、正規表現で指定されたパターンを削除

|cffffc700|Hitem:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x|h[SUBJECT_NAME]|h|r 

私のパターンは^です^

ALL Xさんは、AZ することができ0-9

1つの列には、そのような多くの変数があります(最大8個)。 とすべての変数は、そのような文字列と混合されています。一つの変数で

|affffc100|Hitem:bb:101:1:1:1:1:48:-30:47:18:5:2:6:6:0:0:0:0:0:0:0:0|h[Gold]|h|r NEW SOLD |affffc451|Hitem:bb:101:1:1:1:1:25:-33:12:42:5a:2f:6w:6:0:0:0:0f:0:0a:0b:0|h[Copper]|h|r maximum price 15k|affffx312|Hitem:bb:101:1:1:1:1:25:-33:12:42:5a:2f:6w:6:0:0:0:0f:0:0a:0b:0|h[Silver]|h|r 

私は、これらすべての不要なパターンをきれいにし、括弧でのみサブジェクト名を残したいです。 []

So;

|cffffc700|Hitem:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x|h[SUBJECT NAME]|h|r 

は、変数にSUBJECT_NAMEのみを残す必要があります。 私はあらゆるところでこれらのパターンから1つ以上を探しました...(最大8) 私はどこでもそれを検索しましたが、合理的な回答NOR良いパターンを見つけることができませんでした。それを自分でしようとしましたが、これらのパターンをすべて取り、それを配列にして、それをきれいにして、これらのサブジェクト名だけを残す必要があると思いますが、それを行う方法は正確にはわかりません。

|affffc100|Hitem:bb:101:1:1:1:1:48:-30:47:18:5:2:6:6:0:0:0:0:0:0:0:0|h[Gold]|h|r NEW SOLD |affffc451|Hitem:bb:101:1:1:1:1:25:-33:12:42:5a:2f:6w:6:0:0:0:0f:0:0a:0b:0|h[Copper]|h|r maximum price 15k|affffx312|Hitem:bb:101:1:1:1:1:25:-33:12:42:5a:2f:6w:6:0:0:0:0f:0:0a:0b:0|h[Silver]|h|r 

この:

Gold NEW SOLD Copper maxiumum price 15k Silver 

私は何を使用する必要があり、にpreg_replace私はこれを変換しない方法

?左


もう一つ、私は私の特別なパターンのない文字列を持っているとき、私は、関数などから空の結果を得る:

$str = "15KKK sold, 20KK updated"; 

期待される結果:

"15KKK sold, 20KK updated" // same without any pattern 

けど^それは空の結果を返します。

別の文字列:

$str = "|affffc100|Hitem:bb:101:1:1:1:1:48:-30:47:18:5:2:6:6:0:0:0:0:0:0:0:0|h[Uranium]|h|r 155kk |affffc451|Hitem:bb:101:1:1:1:1:25:-33:12:42:5a:2f:6w:6:0:0:0:0f:0:0a:0b:0|h[Metal]|h|r is sold"; 

期待される結果:私は非パターン文字列でその機能を使用する場合

"Uranium 155kk Metal is sold" 

は、それが今

+0

質問が更新されました – Liveth

+0

質問がもう一度更新されました+ – Liveth

+0

もう一度回答を繰り返さないでください。いくつかのサンプルケースと期待される結果を追加してください。あなたの最後の文字列はどこから来ますか?構造は前のものとは関係ありません。この文字列から何を期待していますか?いくつの構造が存在しますか? – Toto

答えて

0

私がやるだろう:

$str = '|affffc100|Hitem:bb:101:1:1:1:1:48:-30:47:18:5:2:6:6:0:0:0:0:0:0:0:0|h[Gold]|h|r NEW SOLD |affffc451|Hitem:bb:101:1:1:1:1:25:-33:12:42:5a:2f:6w:6:0:0:0:0f:0:0a:0b:0|h[Copper]|h|r maximum price 15k|affffx312|Hitem:bb:101:1:1:1:1:25:-33:12:42:5a:2f:6w:6:0:0:0:0f:0:0a:0b:0|h[Silver]|h|r'; 

preg_match_all('/h(\[.+?\])\|h\|r([^|]*)/', $str, $m); 
for($i=0; $i<count($m[0]); $i++) { 
    $res .= $m[1][$i] . ' ' . $m[2][$i] . ' '; 
} 
echo $res,"\n"; 

出力:

[Gold] NEW SOLD [Copper] maximum price 15k [Silver] 

をあなたが一致しない文字列を保持したい場合は、するpreg_matchの結果をテスト:

if (preg_match_all('/h(\[.+?\])\|h\|r([^|]*)/', $str, $m)) { 
    for($i=0; $i<count($m[0]); $i++) { 
     $res .= $m[1][$i] . ' ' . $m[2][$i] . ' '; 
    } 
} else { 
    $res = $str; 
} 
echo $res,"\n"; 
+0

質問を更新しました – Liveth

+0

こんにちは、私はこれらのパターンを含んでいない文字列を持っています。パターンは含まれていませんが、どうすれば解決できますか? – Liveth

+0

@ noname005:質問を編集して、すべてのサンプルケースと期待される結果を追加してください。 – Toto

0

は、この正規表現を試してどうもありがとうございました私の問題だ空の結果を返します。

\|\w{9}\|Hitem(?::-?\w+)+\|h\[(?<SUBJECTNAME>\w+)\]\|h\|r 

変数シーケンス、および名前付きグループ内の関連する要素名が含まれます。

see the demo here

+0

ありがとうございます、私は質問を更新しました – Liveth

関連する問題