Вопрос

У меня есть кое-какой текст, что-то вроде этого:

Paragraphs of text
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
Some additional paragraphs of text

Чего я хочу, так это сохранить Неизвестный Текст, но избавиться от (КАКОЙ-ТО ИЗВЕСТНЫЙ ТЕКСТ) и (КАКОЙ-ТО ДРУГОЙ ИЗВЕСТНЫЙ ТЕКСТ).

Я думаю, что preg_replace даст мне то, что я хочу, но мне нужно регулярное выражение, чтобы заменить это:

(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)

с помощью этого ..

Unknown Text

Я вижу, что preg_replace ( предыдущее место ) принимает 3 параметра, регулярное выражение, тот самый заменяющий текст, и субъект.

Есть ли способ передать значение неизвестного текста параметру replacement text ИЛИ способ повторно использовать левую и правую части (НЕКОТОРЫЙ ИЗВЕСТНЫЙ ТЕКСТ) и (КАКОЙ-НИБУДЬ ДРУГОЙ ИЗВЕСТНЫЙ ТЕКСТ) не удаляя Неизвестный текст?В качестве альтернативы, существует ли str_replace() решение этой проблемы?

Спасибо

---ОБНОВЛЕНИЕ---

Фрагмент (КАКОЙ-ЛИБО ДРУГОЙ ИЗВЕСТНЫЙ ТЕКСТ) может существовать в других местах текста, но я не хочу, чтобы он удалялся, если он не соответствует шаблону (НЕКОТОРЫЙ ИЗВЕСТНЫЙ ТЕКСТ) Неизвестный текст (НЕКОТОРЫЙ ДРУГОЙ ИЗВЕСТНЫЙ ТЕКСТ).Я думаю, что первоначальные предложения str_replace не сработали бы из-за этого.

Это было полезно?

Решение

Каковы эти условия?Если у вас есть:

(КАКОЙ-ТО ДРУГОЙ ИЗВЕСТНЫЙ ТЕКСТ) Неизвестный текст (КАКОЙ-ТО ИЗВЕСТНЫЙ ТЕКСТ)

(т.е.если текст, заключенный в квадратные скобки, заменен), вы все еще хотите удалить его?Должен ли известный текст всегда находиться в начале или конце строки?Если ответ "да" на любой из этих вопросов, вам, вероятно, лучше использовать регулярное выражение.Что - то вроде этого:

$new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text);

Обратная косая черта (\) заключаются в том , чтобы избежать ( и ) символы, которые имеют особое значение в регулярных выражениях.Я предполагаю, что вы захотите изменить содержимое - на этом этапе вы можете удалить их.

В этом регулярном выражении . является специальным оператором, означающим "любой символ". Он будет соответствовать любому символу.Тот Самый + означает "один или несколько" и является модификатором предыдущего оператора - вместе они могут быть интерпретированы как соответствующие "одному или нескольким любым символам".Тот Самый ( и ) символы используются для захвата фрагментов текста в подшаблон.Охватывая .+ в круглых скобках мы фиксируем это для использования при замене.Первая секция, окруженная ( и ) помечены $1 с помощью движка регулярных выражений.Если бы у нас было больше, они были бы помечены $2, $3, и так далее.

Если ни то, ни другое не применимо, вы можете использовать str_replace функционируйте, как упоминалось в других ответах.

Другие советы

Вы можете просто предоставить str_replace массив строк, которые вы хотите удалить, как таковые:

$destString = str_replace(array('TEXT A', 'TEXT B'), '', $sourceString);

Если вам не требуется какое-либо умное сопоставление с образцом, это будет более быстрое решение, чем регулярное выражение.

Если оба текста действительно известны, вы можете сделать это:

$result = str_replace(array('(SOME KNOWN TEXT)', '(SOME OTHER KNOWN TEXT)'), '', '(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)');

что обеспечивает лучшую производительность, чем регулярное выражение.Первый аргумент — это набор ключей для замены, второй аргумент — на что его заменить, а третий — тема.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top