Autor Zpráva
Chuchycek
Profil
Ahoj,
dokázal by mi někdo poradit, či navést jakým způsobem ze řetězce, lze získat akademické tituly? Např. když mám Prof. RNDr. Ing. Eva Tučná, Dr.Sc., tak výsledek by byl RNDr. Ing. a Dr.Sc.

Děkuji
RastyAmateur
Profil
Chuchycek:
Tak třeba v tvém příkladu jsem si všiml toho, že každý titul končí tečkou. Takže možná nějaký regulár typu ([\w\.]+\.). Problém je, že ty evidentně nechceš vědecko-pedagogické tituly, takže pak to asi budeš muset prohnat nějakou kontrolou (např. in_array())

To byl pouze takový prvotní nápad, možná někdo přijde s něčím lepším :) Jelikož fórum upadá, tak pak by se mohla rozjet diskuze, proč je moje řešení horší :)
Keeehi
Profil
RastyAmateur:
To byl pouze takový prvotní nápad, možná někdo přijde s něčím lepším
A byl dost slušný. Reálné provedení vypadá nějak takto:

preg_match_all('~(?:\w+\.)+~', 'Prof. RNDr. Ing. Eva Tučná, Dr.Sc.', $matches);
var_dump($matches[0]);
RastyAmateur
Profil
Keeehi:
Dohledal jsem si význam části~(?:\w+\.)+~ a jestli to dobře chápu, tak důvod, proč jsi ho tam dal je uvolnění paměti -> zrychlení?
Keeehi
Profil
RastyAmateur:
proč jsi ho tam dal je uvolnění paměti -> zrychlení?
Zrychlení tam teoreticky být může ale bude naprosto nepodstatné. Je to tam kvůli smyslu. Konstrukce (...)+ nemá smysl. Teda má, pokud chceš vybrat poslední opakování ale to tady nechceš.
Pokud bych tedy tu skupinu nevynechal, bylo by v $matches[1] pole, podobné tomu v $matches[0] ale bez reálného použití. Protože poslední prvek by v něm byl jen Sc.
Takhle když je to vynechané, nemůže se stát, že by to někdo omylem použil.
RastyAmateur
Profil
Keeehi:
Moc jsem to nepochopil, co tedy ?: dělá?
Keeehi
Profil
?: na začátku skupiny (skupina se definuje kulatými závorkami) způsobí že ten daný podřetězec se nebude brát jako skupina. Nepůjde na ni odkázat zpětnou referencí. Tudíž se pak ani neobjeví v poli $matches.

V poli matches je na indexu nula řetězec co byl nalezen celým regulárním výrazem a na indexu 1 a dalších řetězce co odpovídají skupinám.
RastyAmateur
Profil
Keeehi:
Už je mi to jasnější, děkuji :)

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: