Решение, которое вы можете использовать здесь, состоит в том, чтобы просто сопоставить весь шаблон и заменить его на один и тот же шаблон без подчеркивания подчеркивания (_
).
I created the example here btw.
Пример:
$str = 'My _[[string to parse]]_ with some _[[examples]]_';
$parsed = preg_replace('/_\[\[([^(\]\]_)]*?)\]\]_/', "[[$1]]", $str);
echo $parsed;
Выход:
Моя [[строка для разбора]] с некоторыми [[примеры]] объяснены
Regex:
_\[\[
отправной точки последовательности вы хотите, чтобы захватить
([^((\]\]_))]*?)
захватывает содержимое того, что находится между открывающей и закрытием последовательностью, не сама последовательность закрытия
\]\]_
последовательность закрытия
Сопоставляя весь шаблон и захватывая содержимое с помощью группы захвата, вы можете полностью заменить шаблон новой подстрокой, содержащей содержимое из сопоставленного шаблона.
Это делается во втором аргументе preg_replace
, который "[[$1]]"
$1
здесь выступает за захваченной группу и содержит его содержимое, которое будет интерполированным между двумя наборами квадратных скобок.
Поскольку шаблон также соответствует символам подчеркивания (_
), они также удаляются, но просто не заменяются ничем во втором аргументе.
Есть * многие диалекты обычного нажатия: http://www.regular-expressions.info/ Чтобы получить эффективную помощь, вы должны указать, на каком языке вы их используете. Bash? C? Рубин? –
Приношу свои извинения. Я использую PhP. –
вы можете сделать это в первом шаблоне, избегая улавливать подчеркивание, дайте нам свой использованный шаблон –