2016-11-25 51 views
0

我想寫一個正則表達式,將從我的目標字符串中刪除/替換問題字符串。在這種情況下,我的問題字符串是:匹配無序子串

top: 

我的目標字符串是:

F12+ vAWGPHGM 

所面臨的挑戰是問題串並不總是全/完好,可以來作爲單個字符。例如:

F 1t2op+:vAWGPHGM 
F t12o+p: vAWGPHGM 
F1t2op+:vAWGPHGM 
F 12top+: vAWGPHGM 

我正在使用pcre(php)正則表達式。

其他考慮因素包括上面的數字可能是一位或兩位數字,加號不總是存在。我一直試圖找出regex101,但沒有太多的運氣。 Regex101

+0

對於給定的字符串,您可以只搜索'[top:] +'並用空字符串 –

+0

替換所有匹配項所需的ou tput是目標字符串。 – Mutuelinvestor

回答

1

可以使用2個捕獲組之前和t後捕獲數字和使用他們的逆向引用替換:

$repl = preg_replace('/\h*(\d*)t(\d*)o\+?p\+?:\h*/', '$1$2+ ', $str); 

對於所有的4例,置換結果將是:

F12+ vAWGPHGM 

Updated RegEx Demo

0

如果我深知你的問題,你只是想擺脫掉字符top:,如果是這樣的話,那麼你可以使用一個字符類是這樣的:

[top:] 

Working demo

PHP代碼

$str = 'F 1t2op+:vHGM 
F t12op: vHGM 
1t2op+:vHGM 
F 12top+: vHGM'; 

$result = preg_replace('/[top:]/', '', $str); 

請記住,這不符合任何順序,這只是從字符串中刪除這些字符。