Autor Zpráva
Jan Doležal
Profil
Učím se reguláry a snažím se zapsat toto:
Najdu v textu množinové závorky, kde mezi nimi je U nebo u.

/\{.*(U+).*\}/i

Nedá se to zapsat i lepé?
lionel messi
Profil
Jan Doležal:
Nie som žiadny profík, takže moja odpoveď možno nebude 100%.

1. Zásadnú chybu ohrozujúcu funkčnosť tam nevidím.
2. Nemyslím si, že by sa s týmto zápisom dali robiť nejaké veľké kúzla (ale názor odborníkov sa môže líšiť).
3. Malý postreh: pre napr. {buu} ti to do spätnej referencie uloží len u, nie uu, neviem, či je to žiaduce.
Jan Doležal
Profil
3. To je OK. Jedná se o filtraci "tagů", zda to daný symbol obsahuje.
Tori
Profil
Filtrace znamená, že kontrolujete tagy po jednom (= řetězce {něco} ), anebo procházíte celou skupinu tagů naráz (= {asd} {u} {foo})? Pokud to druhé, tak místo .*(U+).* použijte [^}]*(U+)[^{]*, ať to nebere několik tagů naráz. Jinak pro takhle triviální hledání ascii podřetězce je efektivnější stripos, ale asi vám jde spíš o trénink s reguláry.
Jan Doležal
Profil
Funckci stripos znám, ale ta použít nejde. Tagy se zapisují tak, že se udělá {} a do nich se píše písmenko (tag). Takže {TUV}, {UTV}, {TVU} ......
Jan Tvrdík
Profil
Jan Doležal:
Hádám, že lépe to bude takto: /\{.*?U.*?\}/i, tj. ungreedy a bez zbytečné repetice
Joker
Profil
Pro zamýšlené použití by asi mezi závorkami nemělo být povolené cokoliv, protože mezi „cokoliv“ patří i uzavírací složená závorka.
Ta by měla být zakázaná, tj. [^\}] místo tečky.
Možná by měla být zakázaná i otevírací závorka.

Například tím regulárem projde {foo} u {foo}. Edit: Pro lepší pochopení jsem zvýraznil část, která podle toho reguláru odpovídá „vnitřku závorek“
To co posílal Jan Tvrdík je lepší, ale stejně to není proti uvedenému problému odolné.
Jan Doležal
Profil
Moc díky za pomoc. Už se tu stím nějak poperu. ;)

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