Autor | Zpráva | ||
---|---|---|---|
nevimjakdal Profil * |
#1 · Zasláno: 6. 9. 2018, 04:28:56
Dobrý den, chtěl bych se zeptat, mám řetězec
"auto je po silnici33" a já bych potřeboval z daného stringu odstranit všechna slova, která končí číslicí, tudíž: z textu: "auto jede po silnici111" bude "auto jede po" z textu "tento den4 je super a slunicko47 sviti" bude "testo je super a sviti" šlo by vytvořit takový regex, který by to odstranil z řetězce? Vůbec mě nenapadá jak a proto prosím o radu. Děkuji |
||
Taps Profil |
#2 · Zasláno: 6. 9. 2018, 07:24:15
nevimjakdal:
vyzkoušej níže uvedené $text = 'tento den4 je super a slunicko47 sviti'; $text2 = preg_replace('/([a-zA-Z]+[0-9]{1,5})/m','',$text); echo $text2; |
||
Tomášeek Profil |
Taps:
To nebude asi úplně ono. Nahradí to i slova s čísly uprostřed (např. "den4a"). Nanahradí to slova s šestičíslím na konci (např. "den412345"). |
||
Kajman Profil |
#4 · Zasláno: 6. 9. 2018, 08:02:08
A i sluníčko47 by to neodstranilo. Snad půjde
'/\b\w+\d+\b/u' |
||
Keeehi Profil |
#5 · Zasláno: 6. 9. 2018, 11:20:02
Kajman:
Toto je podle mě správný směr. A zde popsané případy by to mělo bezpečně nahradit. Ovšem nevimjakdal úplně neřekl, jak naložit třeba s kol1toč33 . Protože to je taky slovo končící číslicí. Pokud by chtěl odstranit i to, musel by regulár vypadat trochu jinak.
|
||
nevimjakdal Profil * |
#6 · Zasláno: 6. 9. 2018, 13:15:12
Děkuji. Jde jen o slova, která mají číslo na konci, nemělo by se stát, že v řetězci bude nějaké slovo, které má číslici na začátku/uprostřed
|
||
Kajman Profil |
#7 · Zasláno: 6. 9. 2018, 13:20:48
Ten regulár z [#4] ostraní i slovo kol1toč33. Spíš je problém, že každé slovo, co končí číslicí, takže i každé víceciferné číslo. Což nevím, jestli opravdu chcete.
phpio.net/s/9dtz |
||
nevimjakdal Profil * |
#8 · Zasláno: 6. 9. 2018, 13:24:12
Aha, tak to je problém :/ Je možnost tam přidat podmínku, že před tou číslicí musí být třeba dva a více znaků a-z A-Z? Omlouvám se, pokud to regulerní výraz nepodporuje, nenapadá mě jiné řešení.
|
||
Kajman Profil |
#9 · Zasláno: 6. 9. 2018, 13:36:09
Taky si nejsem jistý, ale určitě to půjde testovat až ve druhém kole...
$text = 'tento kol1toč33 je super, slunicko47 svití a je 42 stupnu'; $text2 = preg_replace_callback( '/\b\w+\d+\b/u', function ($matches) { return preg_match('/^\d+$/u', $matches[0]) ? $matches[0] : ''; }, $text ); echo $text2; |
||
Keeehi Profil |
#10 · Zasláno: 6. 9. 2018, 15:02:06
nevimjakdal:
„před tou číslicí musí být třeba dva a více znaků a-z A-Z?“ To není problém, ovšem do tohoto rozsahu nespadají znaky s diakritikou. Kajman: Já vždy zapomenu, že pod \w nepatří jen písmena ale i jiné znaky.
\w s modifikátorem u je vlastně jen zkrácený zápis pro [\p{L}\p{N}_]
Takže mi z toho nakonec vyšlo \b\w*[\p{L}_]+\w*\d+\b .
Je tu ještě jedna věc, podtržítko. aaa_bbb se bere jako jedno slovo. Na rozdíl od spojovníku nebo pomlčky které to rozdělují na dvě slova (propan-butan Zikmund–Hanzelka). Stojí tedy za to se zamyslet, jak se chovat k podtržítku. Co jsem našel, tak žádná typografická pravidla pro něj neplatí protože se obyčejném textu nevyskytuje. Tento znak přinesla doba počítačů a český jazyk ho oficiálně snad zatím nijak neadaptoval. Osobně bych se spíše klonil k variantě, že i podtržítko rozděluje dvě slova. Pokud by jsi to tak chtěl, pak by regulár vypadal takto \b[\p{L}\p{N}]*[\p{L}]+[\p{L}\p{N}]*\d+\b
|
||
nevimjakdal Profil * |
#11 · Zasláno: 6. 9. 2018, 15:35:56
Použiju to, co bere _ jako dvě slova, to bude asi nejlepší mi přijde. Děkuji moc a přeji hezký zbytek dne.
|
||
Časová prodleva: 6 let
|
0