2015-05-20 6 views
0

Я пытаюсь научиться Regex и этот вопрос кажется трудным для меня У меня есть код, как этотвставки символа в определенной позиции в данной строке

$string = "He is type a document" 

в $ строка вводится пользователем в HTML-форме текстовое поле, теперь я хочу, чтобы исправить его

$correct = "He is typing a document" 

код будет сканировать через предложения и сделать остановку в слово за «он» (или «она», «оно»), а затем добавить " ing "до последней позиции этого слова

+0

Вы с может предоставить нам любое регулярное выражение, которое вы пытались выполнить. – ZygD

+0

Но описанный алгоритм привел бы к тому, что «Он набирает документ», если вы просто добавите «ing» в последнюю позицию этого слова. А как насчет «Он глуп» или «Очень приятно быть здесь». Это было бы «Он глупо» и «Очень приятно быть здесь». – steven

+0

Да, я знаю, английский широко распространен, все, что я пытаюсь сделать, - это правильно сначала базовый (be + V_ing). Я могу заменить «-ing» для пользователя легко подстать – user2986673

ответ

0

Вы можете использовать следующее соответствие:

(?<=(?:he is)|(?:she is)|(?:it is))(\S*)\S 

И заменить $1ing

См DEMO

Edit: To ограничить от соответствующих слов с ing используйте следующее:

(?<=(?:he is)|(?:she is)|(?:it is))(\S*)\S(?<!ing)\b 

Edit: Чтобы сделать замену более осмысленным использование происходит некорректно:

(?<=(?:he is)|(?:she is)|(?:it is))(\S+?)[aeiou]?(?<!ing)\b 

Это даст следующее:

type -> typing 
eat -> eating (not eaing) 
break -> breaking (not breaing) 
write -> writing 

См. updated DEMO

+0

. Это работает для меня, но что, если пользовательский ввод был с самого начала, он удваивает «ing» – user2986673

+0

@ user2986673 проверяет обновление :) –

+0

Спасибо. Его идеальное сейчас :) – user2986673

0
^(?:s?he|it) is \S+\K 

Вы можете использовать это. Заменить на ing. См. Демонстрационный ролик.

https://regex101.com/r/vA0yQ3/1

$re = "/^(?:s?he|it) is \\S+\\K/mi"; 
$str = "He is type a document\nshe is type a document\nit is type a document"; 
$subst = "ing"; 

$result = preg_replace($re, $subst, $str); 
+0

Спасибо за ваш быстрый ответ. Но если пользователи вводят правильное предложение с самого начала, это удвоит число голосов – user2986673

Смежные вопросы