Пример строки
{{ai|Perseverance|Garen}} is no longer removed by combat dehancing effects such as {{ai|Blood Scent|Warwick}}.
Я хочу поймать {{ai|Perseverance|Garen}}
из этого {{ai| |Garen}}
{{ai| |Garen}}
и сохраните среднюю часть с {{ai| |Warwick}}
{{ai| |Warwick}}
Вот что я придумал:
(\{\{ai\|)\w+(\|\w+\}\})
это довольно близко к нему caputers первый, но с Perserverance я мог бы сделать регулярное выражение дважды, чтобы избавиться от первого {{ai| and then |Garen}}
{{ai| and then |Garen}}
используя сначала (\{\{ai\|)
а затем (\|\w+\}\})
.
Есть ли способ сделать это в одном регулярном выражении?
UPDATE: я использую PHP только для того, чтобы быть понятным
Я предполагаю, что вы хотите удалить {{some|
и |thing}}
и сохранить то, что находится посередине.
Вы можете использовать
{{[^|]*\|([^|]*)\|[^|]*}}
и $1
в качестве шаблона замены.
Регулярное выражение означает:
{{
- два символа {
символы[^|]*\|
- ноль или больше символов, кроме |
(с [^|]*
), за которым следует буква |
([^|]*)
- Группа 1, которая соответствует нулю или нескольким символам, отличным от |
\|
- буквальный |
[^|]*
- снова ноль или больше символов, кроме |
}}
- закрытие }}
См. Демонстрацию
Обратите внимание, что это будет работать, когда есть 3 |
-separated внутри {{
/}}
.
В 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
preg_replace
: preg_replace('~{{[^|]*\|([^|]*)\|[^|]*}}~', '\1', $str)
Ваше совпадение находится в первой группе следующего регулярного выражения
\{\{[^|]*\|([^|]*)