Autor | Zpráva | ||
---|---|---|---|
Chuchycek Profil |
#1 · Zasláno: 13. 2. 2018, 17:50:03
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 |
#2 · Zasláno: 13. 2. 2018, 18:31:54
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 |
#3 · Zasláno: 13. 2. 2018, 23:21:44
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 |
#4 · Zasláno: 13. 2. 2018, 23:50:12
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 |
#6 · Zasláno: 14. 2. 2018, 18:11:21
Keeehi:
Moc jsem to nepochopil, co tedy ?: dělá?
|
||
Keeehi Profil |
#7 · Zasláno: 14. 2. 2018, 19:32:47
?: 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 |
#8 · Zasláno: 14. 2. 2018, 21:53:53
Keeehi:
Už je mi to jasnější, děkuji :) |
||
Časová prodleva: 6 let
|
0