Пример строки
{{ai|Perseverance|Garen}} is no longer removed by combat dehancing effects such as {{ai|Blood Scent|Warwick}}.
Я хочу поймать {{ai|Perseverance|Garen}}
из этого {{ai| |Garen}}
и сохранить среднюю часть с {{ai| |Warwick}}
Вот что я придумал:
(\{\{ai\|)\w+(\|\w+\}\})
он довольно близок к первому, но с Perserverance я мог бы дважды сделать регулярное выражение, чтобы избавиться от первого {{ai| and then |Garen}}
с помощью (\{\{ai\|)
сначала, а потом (\|\w+\}\})
,
Есть ли способ сделать это в одном регулярном выражении?
ОБНОВЛЕНИЕ: я использую PHP только для ясности
Я полагаю, вы хотите удалить {{some|
а также |thing}}
части и держите то, что посередине.
Ты можешь использовать
{{[^|]*\|([^|]*)\|[^|]*}}
а также $1
в качестве шаблона замены.
Регулярное выражение означает:
{{
— два буквальных {
символы[^|]*\|
— ноль или более символов, кроме |
(с [^|]*
) с последующим буквальным |
([^|]*)
— Группа 1, которая соответствует нулю или более символов, кроме |
\|
— буквальный |
[^|]*
— опять ноль или более символов, кроме |
}}
— закрытие }}
Увидеть демонстрация
Обратите внимание, что будет работать, когда есть 3 |
части внутри {{
/}}
,
В PHP вы можете использовать следующий код:
$re = '~{{[^|]*\|([^|]*)\|[^|]*}}~';
$str = "{{ai|Perseverance|Garen}} is no longer removed by combat dehancing effects such as {{ai|Blood Scent|Warwick}}";
$result = preg_replace($re, '\1', $str);
echo $result;
// => Perseverance is no longer removed by combat dehancing effects such as Blood Scent
Ваш матч в группе 1 следующего регулярного выражения
\{\{[^|]*\|([^|]*)