2015-11-08 1 views
0

Я пытаюсь найти и заменить все слова, которые заканчиваются на 'ing'. Как мне это сделать?Поиск и замена всех слов, которые заканчиваются на 'ing'

$text = "dreaming"; 
if (strlen($text) >= 6) { 

if (0 === strpos($text, "ing")) 
//replace the last 3 characters of $text <---not sure how to do this either 
echo $text; 
echo "true";  
} 

Результат:

null 

Хотите Результат:

dream 
true 

ответ

3

Вы также можете использовать substr

$text = "dreaming"; 
 

 
if (substr($text, (strlen($text) - 3), 3) === 'ing') { 
 
    $text = substr($text, 0, (strlen($text) - 3)); 
 
} 
 
echo $text;

+0

Спасибо. Это очень хорошо. :) – frosty

+0

Не собираюсь понижать это, потому что он действительно работает, но посмотрите на примеры, которые опубликовал Chris85 и я. Это более полное решение для вас. Этот конкретный код работает как менее оптимизированная версия str_replace. – MiDri

+0

@MiDri Ах, извините. Может быть, мой титул был немного обманчивым. $ text будет содержать только одно слово, потому что оно уже взорвалось - я просто не содержал коды для него, потому что я не думал, что это имеет значение. – frosty

-2
$text = "dreaming"; 
if (strlen($text) >= 6 && strpos($text,'ing')) { 
    echo str_replace('ing', '', $text); 
    echo "true";  
} 

Вы должны проверить руководство. Есть много различных строковых функций и различные способов, которыми Вы могли бы сделать это: http://php.net/manual/en/ref.strings.php

Поскольку вы настаивали:

$text = "dreaming"; 
if (strlen($text) >= 6 && substr($text,strlen($text)-3)=='ing') { 
    echo str_replace('ing', '', $text); 
    echo "true";  
} 
+0

Uh-uh. Вы, кажется, забываете, что я только хочу найти и заменить слова, которые ENDS имеют «ing». Вы код начнете находить и заменять слова, содержащие «ing» в начале, середине или в другом месте, и это не то, что я ищу. – frosty

+0

Тогда просто измените его. Посмотрите на различные функции. Мне не нужно все отдать вам, не так ли? – ElefantPhace

+0

Ха-ха. Это нелепо. Я уже знаю все функции, которые вы используете для своего кода. Единственная причина, по которой я спрашивал, состояла в том, что я не мог найти способ сделать это, используя их. Вы очень бесполезны и недостаточно внимательно изучили контекст вопроса. – frosty

3

Это должно работать для замены ING в конце слов, в то время как игнорирование вещей, начиная с Ингами, а также как слова, находящиеся посреди них.

$output = preg_replace('/(\w)ing([\W]+|$)/i', '$1$2', $input); 

Обновлено, чтобы отразить изменения, указанные в комментариях.

+0

Это не будет соответствовать, если слово не следует '\ W' – Mariano

+0

\ W эквивалентно NOT [a-zA-Z_], так что буквально все, что не является продолжением слова. – MiDri

+1

На самом деле это эквивалентно '[^ a-zA-Z0-9_]'. Тем не менее, он будет терпеть неудачу с '$ input =" dreaming ", поскольку за ним не следует' \ W'. Вместо использования границ слов вместо – Mariano

2

Вы можете использовать два regexs в зависимости от того, что вы пытаетесь сделать ваш вопрос немного неоднозначным.

echo preg_replace('/([a-zA-Z]+)ing((:?[\s.,;!?]|$))/', '$1$2', $text); 

или

echo preg_replace('/.{3}$/', '', $text); 

Первое регулярное выражение ищет символов слово перед лицом ing и затем знаки препинания, пробелы, или в конце строки. Второй просто снимает последние три символа строки.

+2

Второй не имеет смысла .. вы говорите ему, чтобы заменить любые 3 символа перед концом строки буквально $ 1 $ 2 (так как вы ничего не извлекаете из регулярного выражения) – MiDri

+0

@MiDri О да, забыл удалить эта группа замены, спасибо (не повредит ничего, просто не имеет смысла.). – chris85

+0

Я выполняю мои регулярные проверки очень быстро в javascript (ведет себя немного по-другому) в javascript он использует литералы $ 1 и $ 2, когда группы замещения не захвачены. – MiDri

0

Вы можете использовать regex и word boundaries.

$str = preg_replace('/\Bing\b/', "", $str); 

\B (без границы слова) соответствует где слово символы слипания.

Знайте, что оно заменяет king на k. См. demo at regex101