|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
我通常打印的变量是^
|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
我的模式是^
所有X可以是 a-Z,0-9
在一列中我有很多变量(最多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
在一个变量中,我想清除所有这些不必要的模式,只留下括号中的主题名称。 []
因此;
|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。 只是提醒一下,在我的每个变量中,我总是不止一个这样的模式......(最多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
但^那个人返回EMPTY结果..
另一个字符串:
$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 :(得分:0)
试试这个正则表达式:
\|\w{9}\|Hitem(?::-?\w+)+\|h\[(?<SUBJECTNAME>\w+)\]\|h\|r
它将捕获每个变量序列,以及命名组中的相关元素名称。
答案 1 :(得分: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";