Loading...
Hristo_Penchev avatar Hristo_Penchev 389 Точки

[Exam Problems] PHP Basics 29 Аугуст 2014 Evening - Problem {2} - Uppercase Words

Здравейте колеги,

На подготовката решихме тази задача с цикли, но ми беше интересно как може да стане с регекс. Затова днес се помъчих да я реша. Малко нестандартно решение, но стана добре и сравнително кратко. Ето кода:

http://pastebin.com/2TsJyCUT

Най-трудно ми беше да измисля как да запазя мястото на думите, които регексът засича в текста и да ги заменя с нови. preg_match замества всичко в конкретен патерн с даден стринг. Затова направих масив от патерни, всеки от които мачва единствено и само конкретната дума и я замества със съответния реплейсър. Надявам се кодът да ви е полезен. Ако има въпроси, питайте.

Тагове:
6
PHP Web Development Basics 21/12/2014 23:31:15
Filkolev avatar Filkolev 4482 Точки

И от мен имаш поздравления за хубавото решение.

И аз тръгнах да я решавам с регекси, но бая се забатачих. Опрях в крайна сметка до look-around-и, но не можах да го накарам да проработи с positive - т.е. аз проверявах дали преди и след думата има нещо, което не е буква, ето с този патърн:

(?<=[^a-zA-Z])(?P<word>[A-Z]+)(?=[^a-zA-Z])

Не хващаше думите в началото и в края (това поне хубаво, че нулев тест гърмеше, че на други задачи се чудиш и маеш). Пробвах набързо да го насиля да проработи така, но се оказа доста по-лесно да се ползват negative look-around-и, както ти си направил.

Имам две разлики с твоя код - 1) правя промените още в цикъла, а не накрая; 2) ползвам си именувана група, установих, че са доста полезни поне за мен, за да се ориентирам по-лесно в попарите дето дробя с preg_match.

Ето кодът, доста съвпада с твоя: ЦЪК.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.