Я заключил вашу оригинальную строку в двойные кавычки:
$string = "Mutualism has been retrospectively characterised as ideologically situated between individualist and collectivist forms of anarchism.<ref>Avrich, Paul. ''Anarchist Voices: An Oral History of Anarchism in America'', Princeton University Press 1996 ISBN 0-691-04494-5, p.6<br />''Blackwell Encyclopaedia of Political Thought'', Blackwell Publishing 1991 ISBN 0-631-17944-5, p. 11.</ref> Proudhon first characterised his goal as a "third form of society, the synthesis of communism and property."<ref>Pierre-Joseph Proudhon. ''What Is Property?'' Princeton, MA: Benjamin R. Tucker, 1876. p. 281.</ref> Another is <ref name=rupert/>";
$pattern = '#<ref.*?>(.*?</ref>)?#is';
print htmlspecialchars_decode(preg_replace($pattern, '', $string));
htmlspecialchars_decode
требуется для преобразования "
в двойные кавычки - пропустите это, если вы выводите на устройство, которое делает это за вас, такое как браузер.
Выход:
Мутуализм был ретроспективно
характеризуется как идеологически
расположенный между индивидуалистом и
Коллективистские формы анархизма.
Прудон первым охарактеризовал свою цель
как «третья форма общества,
синтез коммунизма и собственности ".
Еще один
Примечания:
Я поменял местами обычный /
разделитель на #
, что означает, что /
можно использовать внутри шаблона без его выхода.
.*
по умолчанию жадный. Добавление модификатора ?
в шаблон делает это несправедливым, что эквивалентно добавлению модификатора шаблона U
.
.
<ref.*?>
соответствует <ref
, за которым следует что-либо до следующего >
.
.*?
соответствует чему-либо до следующего </ref>
Обтекание .*?</ref>
в ()?
означает, что нужно найти ноль или одно вхождение. Это подходит для ситуаций, когда есть открывающий и закрывающий теги, и где есть открывающий тег без содержимого после него.
Если вы также хотите сопоставить открывающий тег с содержимым, следующим за ним, но без закрывающего тега, вы можете изменить шаблон следующим образом:
$pattern = '#<ref.*?>(.*?</ref>|.*)#is';