@erwit: To takie narzędzie, dzięki któremu jeśli masz problem, to bardzo szybko moƶesz mieć 2 problemy

@mqmq: znaczekPodTylda tresc znaczekPodTylda ⟶

tresc
!spoiler tag
@anonim1133: Poprawka do 12:


Teraz dopasowuje wszystko z zyskiem 1 punktu.

Ewentualnie można się pokusić o poprawę 9 na:


O wiele mniej czytelne i typowo data specific (podobnie jak rozwiązania wicepsa i paffnucego), ale daje +7 punktów. :)

Po tych zmianach Wykop uzbierał 3029 punktów. Gdzie należy się zgłaszać po nagrodę?
@Dyzajash: Coś takiego powinno pomóc:

^\s*if\s*\((.*)\)
Ale coś czuję, że potrzebujesz parsera. Regexpy nie nadają się do takich zastosowań. Powyższy regex dopasuje

if(a==)()
z dopasowaniem warunku równym

a==)(
. Przerobienie dopasowania warunku na lazy (czyli

.*?
) dla tego samego wejścia dopasuje warunek jako

a==
. Oba nie wydają się prawidłowe, i regexpami tych problemów nie przeskoczysz.
@GGrindzior: Generalnie tak właśnie powinieneś zrobić – łatwiejsze w zrozumieniu i utrzymaniu oraz ewentualnym rozszerzaniu. Ponadto lookahead jest dość kosztowny w regexpach (tu raczej nie będzie to miało większego wpływu, ale jednak).

A w zasadzie, jeśli to tylko sprawdzanie rozszerzenia, to najprostszy sposób będzie najlepszy:

[1] Tablica z niechcianymi rozszerzeniami – blacklista,

[2] split nazwy pliku po kropce,

[3] sprawdzenie, czy ostatni element splitowanej tablicy jest na blackliście.

Blacklistę można wtedy
@Rincewind: "I żaden regexp nie jest potrzebny" brzmi jak "i żyli długo i szczęśliwie". Siriusli. Podpisuję się obiema rękami pod mottem, którym Damian Conway opatrzył rozdział o wyrażeniach regularnych w książce "Perl Best Practices", cytuję z pamięci: "Czasami programista napotyka na problem i myśli sobie: wiem, rozwiążę to wyrażeniem regularnym! Od tej pory ma dwa problemy."
@babisuk: jeżeli taką przyjęto konwencję to postaram się do niej stosować, ale zrobię to tylko z uwagi na fakt, iż kolega jest bordo ;)

btw. problem udało mi się rozwiązać wykorzystując metodę split klasy String
@handler: Miałem kiedyś podobny problem, nie podam ci teraz rozwiązania, bo nigdy nie pamiętam reguł, ale trzeba to napisać tak, żeby akceptował

dowolne 1, 2, lub 3 cyfry - tak łapiesz przedział od 1 do 999

a na końcu dopisz

|1000
- czyli akceptowanie 1000 :)

edit:

no jakoś tak to będzie

([1-9][0-9]{3}|1000)
ale pewności nie mam :]
Nawiasy na zewnątrz pozwolą Ci złapać całość wyrażenia w razie co. Nie są konieczne jeśli preg_matcha używasz - wtedy domyślnie cały regexp jest zwracany do wyniku. Grunt, że działa :) Nie ma to jak fajna łamigłówka dla wprawy na początek dnia :)
@YvusBellator: Bez dodatków,same makro wystarczy dobrze zrobić, czyli wyszukujesz wyrażenie regularne kopiujesz je do schowka i powiedzmy wklejasz na końcu dokumentu :) Tak na szybko pomyślane, ale Notepad++ jest do tego świetny :))