Регулярное выражение PHP для удаления нескольких? -Знаков

У меня возникли проблемы с поиском правильной строки регулярного выражения, чтобы удалить последовательность из нескольких? символы. Я хочу заменить более одного последовательного? с одним?, но какие символы убежать ... ускользает от меня.

Пример ввода:

Is this thing on??? or what???

Желаемый результат:

Is this thing on? or what?

Я использую preg_replace () в PHP.

+1 за уменьшение количества блоков вопросительных знаков на Земле.

Kobi 11.11.2010 09:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
1
4 333
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

preg_replace('{\?+}', '?', 'Is this thing on??? or what???');

То есть вам нужно только избежать вопросительного знака, плюс в «\? +» Означает, что мы заменяем каждый экземпляр одним или несколькими символами, хотя я подозреваю, что «\? {2,}» может быть даже лучше и более эффективный (замена каждого экземпляра двумя или более знаками вопроса.

preg_replace( '{\?+}', '?', $text );

должен это сделать.

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

Это такие ситуации, когда C# дословные строки хорош.

Вам не нужно экранировать обратную косую черту в одной строке в кавычках. Вы можете, если хотите, но не обязаны.

Jeremy Ruten 26.09.2008 02:47

Это должно работать (я это тестировал):

preg_replace('/\?+/', '?', $subject);

preg_replace('/\?{2,}/','?',$text)

это должно сделать это

preg_replace('/(\?+)/m', '?', 'what is going in here????');

знак вопроса должен быть экранирован, а m означает многострочный режим.

Это был хороший веб-сайт, чтобы опробовать его на http://regex.larsolavtorvik.com/

Вы пробовали шаблон

[?]+

с заменой ??

? в символьном классе считается буквальным знаком вопроса.

HamZa 02.03.2014 17:00

str_replace('??', '?', 'Replace ??? in this text');

Результатом этого будет «Заменить ?? в этом тексте», если вы не поместите его в цикл while, и если вы это сделаете, он внезапно станет намного менее эффективным, чем preg_replace. На моем тестовом сервере выполнение этого в цикле 1 миллион раз заняло (примерно) 2,7 секунды (примерно), тогда как preg_replace заняла всего 1,2 секунды.

grimman 17.11.2009 15:22

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