Enter toevoegen aan een php waarde
Nu wil ik dat de lap tekst wordt gescheiden na een bepaalde combinatie (punt spatie hoofdletter) met een Enter (break line). Ik heb het geprobeerd met bijvoorbeeld 'substr_count' maar daarmee kan ik niet zoeken op mijn combinatie (punt spatie hoofdletter --> voorbeeld '. Hallo') Weet iemand of het überhaupt mogelijk is?
str_replace() wat je zoekt. Hiermee kun je je combinatie vervangen door een enter
edit: Afhankelijk van wat je hiermee wil bereiken zou je ook nog explode() kunnen gebruiken.
Volgens mij is edit: Afhankelijk van wat je hiermee wil bereiken zou je ook nog explode() kunnen gebruiken.
Gewijzigd op 10/01/2014 13:41:09 door Michael -
Zo heb je na elke punt gevolgd door een spatie een (html) enter.
Gewijzigd op 10/01/2014 13:41:33 door - SanThe -
met $tekst = str_replace('. ', '.<br/>', $tekst); krijg ik na elke punt-spatie (. ) een enter.
Ik wil pas na een combinatie van 'punt-spatie-hoofdletter' pas een enter.
Na een punt komt als het goed is (bijna) nooit een kleine letter.
Bij (of na) een afkorting krijg je ook een . spatie :)
hier eens na
Kijk Gewijzigd op 10/01/2014 14:48:34 door Michael -
Dat werkt inderdaad Michael!
(Ik heb ook de spatie in \s+ veranderd, maar dat is niet per se noodzakelijk.)
Gewijzigd op 10/01/2014 15:35:58 door Willem vp
Willem vp op 10/01/2014 15:34:01:
... om met lookbehind/lookahead assertions te werken, omdat er anders references worden aangemaakt die eigenlijk alleen gebruikt worden om te voorkomen dat je karakters kwijtraakt.
Willem, kun je eens toelichten wat je hiermee bedoelt? Ik lees de woorden, maar heb geen flauw ideee wat je zegt :-)
De reguliere expressie van Michael (die overigens ook gewoon goed is) was als volgt:
Er wordt dus gezocht naar een punt, gevolgd door een spatie, gevolgd door een hoofdletter. Als je dat zou vervangen door een break-tag, ben je de punt en de hoofdletter kwijt, omdat die onderdeel zijn van de match. Om dat te voorkomen heeft hij haakjes geplaatst; hetgeen tussen haakjes staat wordt dan onthouden en daar kun je bij het vervangen weer naar refereren (in dit geval met $1 en $2, omdat er twee sets haakjes geplaatst zijn).
Echter, die punt en hoofdletter zijn eigenlijk geen onderdeel van de find-and-replace-operatie. Het enige wat je wilt vervangen is de spatie die ertussen staat. Wat er hierboven eigenlijk gebeurt is dat je niet alleen de spatie vervangt, maar ook de letters die er omheen staan (en die vervang je dan door zichzelf).
Stel dat je een gele auto hebt. Die wil je groen spuiten, maar alleen als hij geparkeerd staat tussen een rode en een blauwe auto. Als de autospuiter hetzelfde zou doen als de reguliere expressie, zou hij de rode auto rood spuiten, de gele auto groen en vervolgens de blauwe auto blauw. Daar zit het een en ander aan onnodig werk tussen. ;-)
Om de reguliere expressie efficiënter te maken zijn daarom assertions bedacht:
De (?<=\.) is een lookbehind assertion die "waar" is als de te zoeken string \s+ (dus 1 of meerdere whitespace-tekens) direct achter een punt (\.) staat. De (?=[A-Z]) is een lookahead assertion die waar is als \s+ wordt gevolgd door een hoofdletter ([A-Z]). Zowel de punt als de hoofdletter worden echter geen onderdeel van de match.
Als de \s+ niet achter een punt staat, maar bijvoorbeeld achter een letter, zal de lookbehind assertion "onwaar" zijn. Hetzelfde geldt voor de lookahead assertion als de \s+ niet wordt gevolgd door een hoofdletter, maar door bijvoorbeeld een gewone letter. Pas wanneer alle assertions "waar" zijn, zal preg_replace de \s+ vervangen door een break-tag. Omdat de assertions geen onderdeel van de match zijn, worden de punt en de hoofdletter met rust gelaten.
Willem +1. Snap ik alleen niet waarom er 2 verschillen zijn (voor en achter, of misschien meer) terwijl die moet zoeken in de volgorde zoals jij het er neer zet, maar dat ga ik zelf nog wel eens uitzoeken :)