Хорошо, я пытался выяснить это какое-то время, но я не могу понять это правильно.Мне нужно удалить последний вхождение непоследовательного, дублирующего слова / фразы из END строки.Например, я хочу, чтобы
Love in My Antonia Love in
и
Love in My Antonia Love
стали
Love in My Antonia
Я пробовал множество моделей без успеха.Самое близкое, что я получил к успеху, это:
preg_replace('/\b(\w{2,})\b(?=.*?\\1)\W*/', ''
, который удаляет первое вхождение (а не последнее), рендеринг:
in My Antonia Love (ORIGINAL: "Love in My Antonia Love")
и
My Antonia Love in (ORIGINAL: "Love in My Antonia Love in")
Пожалуйста, помогите!:)
ОБНОВЛЕНИЕ (9 ноября, 2:00 вечера, по тихоокеанскому времени): Я должен был пояснить, что - если это вообще возможно - я бы хотел, чтобы решение оставалось в простом, компактном формате из 1 строки, который я показал в моем примере:
preg_replace('/\b(\w{2,})\b(?=.*?\\1)\W*/', ''
Мой пример уже работает почти идеально, за исключением того, что он удаляет совпадение first вместо last .Я надеялся, что кто-то может скромно манипулировать моим существующим кодом, чтобы он удалял последнее совпадение (в конце строки) вместо первого вхождения.Это сложнее, чем я думал?
Ранее я придумал версию, которая находит два последовательных, повторяющихся слова / фразы в любом месте строки и заменяет их одним:
preg_replace('~\b([\S \w]{3,})\K\b(?:\s*\1)+~', '',
Это делает "пиццу пиццей" превращаться в "пиццу" и "я ходил"в магазин я ходил в магазин "стал" я ходил в магазин ".Это здорово, и я уже включил это решение.Теперь, во-вторых, мне нужно, чтобы «Пицца - лучшая пицца», чтобы стать «Пицца - лучшая».Точно так же, «Овчарки - замечательные домашние животные», должно стать «Овчарки - замечательные домашние животные».Так что, в принципе, не имеет значения, где в строке появляется первое вхождение;все, что имеет значение, - это то, что вхождение в END OF STRING удаляется.Надеюсь, это принесет больше ясности.