匹配无序子串

时间:2016-11-25 14:47:23

标签: regex

我正在尝试编写一个正则表达式,它将从目标字符串中删除/替换问题字符串。在这种情况下,我的问题字符串是:

top:

我的目标字符串是:

F12+ vAWGPHGM

挑战是问题字符串并不总是完整/完整,可以作为单个字符出现。例如:

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

我正在使用pcre(php)正则表达式。

其他考虑因素包括上面的数字可以是一个或两个数字,并且加号并不总是存在。我一直试图在regex101上解决这个问题,但运气不好。 Regex101

2 个答案:

答案 0 :(得分:1)

您可以使用2个捕获的组来捕获t之前和之后的数字,并在替换时使用其反向引用:

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

对于所有4个案例,替换结果将是:

F12+ vAWGPHGM

Updated RegEx Demo

答案 1 :(得分:0)

如果我理解你的问题,你只想摆脱字符top:,如果是这样,那么你可以使用这样的角色类:

[top:]

<强> Working demo

Php代码

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

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

请记住,这不遵循任何顺序,这只是从字符串中删除这些字符。