Autor Zpráva
wolf_2006
Profil *
Mám nějaký řetězec třeba:
První větaDruhá větaTřetí věta

Ve výsledku má být:
První věta
Druhá věta
Třetí věta

Snažím se vytvořit správný výraz, ale nějak mi to nejde. Když zapíšu [A-Z], tak mi to správně najde všechna velká písmena,
ale já bych potřeboval, aby to to první vynechalo.

Díky za nakopnutí

Moderátor Joker: Titulek „Regulární výraz“ byl moc obecný. Příště zkus prosím vymyslet lepší.
Majkl578
Profil
wolf_2006:
Ve výsledku má být

$text = 'První větaDruhá větaTřetí věta';
$textAry = preg_split('~(?<!^)(?=[A-Z])~', $text);
var_dump($textAry);
wolf_2006
Profil *
Majkl578:
Díky, mohl bys mi k tomu dát nějaký popisek, pořád v tom tápu
Joker
Profil
wolf_2006:
mohl bys mi k tomu dát nějaký popisek
preg_split viz manuál, regulární výraz určuje na kterých místech se má řetězec rozdělit.
(?<!^) = záporné tvrzení o předcházejícím, tj. předchozí znak nesmí být začátek řetězce (nebo řádku)
(?=[A-Z]) = kladné tvrzení o následujícím, tj. následující znak musí být velké písmeno

Tedy řetězec se rozdělí v místě před kterým není začátek řetězce (případně řádku) a zároveň za ním je velké písmeno.

Akorát to myslím nebude fungovat na velká písmena s diakritikou, například:
První větaDruhá větaTřetí větaČtvrtá věta
o_O
Profil
Joker:
myslím
Nebude.

Dělal jsem menší sbírku znaků s diakritikou, tak doplňuji:
$text = 'První větaDruhá větaTřetí větaČtvrtá věta'; 
$textAry = preg_split('~(?<!^)(?=[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽĹÔÄËÏÖÜŸ])~u', $text); 
var_dump($textAry);
wolf_2006
Profil *
Joker:
Díky za vysvetlení, už to vypada mnohem čitelnějc, ještě pár hodin tréniku a snad to budu moc běžně používat
wolf_2006
Profil *
Jinak ty české znaky to fakt nezobrazuje a tak jsem to pořešil dle o_O
Majkl578
Profil
Myslím, že úplně ideální by bylo použít pro znaky s diakritikou escape sekvence určené k matchování unicode znaků:
$text = 'První větaDruhá větaTřetí větaČtvrtá věta';
$textAry = preg_split('~(?<!^)(?=\p{Lu})~u', $text);
var_dump($textAry);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0