Я пытаюсь написать регулярное выражение, которое удалит / заменит проблемную строку из моей целевой строки. В этом случае моя проблемная строка:

top:

Моя целевая строка:

F12+ vAWGPHGM

Проблема в том, что проблемная строка не всегда целая / неповрежденная и может быть представлена отдельными символами. Например:

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

Я использую регулярное выражение pcre (php).

Другие соображения включают в себя указанное выше число может состоять из одной или двух цифр, плюс не всегда присутствует. Я пытался понять это на regex101, но без особого успеха. Regex101

0
Mutuelinvestor 25 Ноя 2016 в 17:47

2 ответа

Лучший ответ

Вы можете использовать 2 захваченные группы для захвата цифр до и после t и использовать их обратные ссылки вместо них:

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

Для всех 4 случаев результат замены будет:

F12+ vAWGPHGM

Обновленная демоверсия RegEx

1
anubhava 25 Ноя 2016 в 15:07

Если я хорошо понял ваш вопрос, вы просто хотите избавиться от символов t, o, p и :, если это так, то вы можете использовать такой класс персонажей:

[top:]

Рабочая демонстрация

Код php

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

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

Имейте в виду, что это не соответствует никакому порядку, это просто удаляет эти символы из вашей строки.

0
Federico Piazza 25 Ноя 2016 в 14:56