Tagadás regexben
Sziasztok,
hosszas keresgeles utan teszem fel itt a kerdesemet:
hogyan lehet regexben tagadni?
azaz van egy peldaszovegem:ebbol kellene megkeresni az olyan szavakat, amik nem alma.
Az eredeti problema a kovetkezo:
van egy adatbazisbol jovo szoveg, amik tartalmazhatnak linkeket es kepeket is a kovetkezo formaban:
link: [url=http://www.akarmi.hu]linkszoveg[url]
kep: [img=http://kephelye.hu/akarmi.jpg]Kepfelirat[/img]
illetve ohatatlanul tartalmazhatnak mondjuk 60 karakternel hosszabb szavakat, amelyek szettoljak a designt (css megoldast nem szeretnek, overflow: hidden; stb)
Olyan regexet szerettem volna irni, hogy adjon hozza egy szokozt minden 60. karakter utan - ez rendben is van, csakhogy a linkeket ez el fogja rontani!
Tehat a szabaly: adj hozza egy szokozt minden 60. karakter utan, kivetel ha az nem \[url=.*\].*\[url\] alaku.
Ti hogyan oldanatok meg ezt a problemat?
Elore is kosz a segitseget.
■ hosszas keresgeles utan teszem fel itt a kerdesemet:
hogyan lehet regexben tagadni?
azaz van egy peldaszovegem:
alma narancs korte
Az eredeti problema a kovetkezo:
van egy adatbazisbol jovo szoveg, amik tartalmazhatnak linkeket es kepeket is a kovetkezo formaban:
link: [url=http://www.akarmi.hu]linkszoveg[url]
kep: [img=http://kephelye.hu/akarmi.jpg]Kepfelirat[/img]
illetve ohatatlanul tartalmazhatnak mondjuk 60 karakternel hosszabb szavakat, amelyek szettoljak a designt (css megoldast nem szeretnek, overflow: hidden; stb)
Olyan regexet szerettem volna irni, hogy adjon hozza egy szokozt minden 60. karakter utan - ez rendben is van, csakhogy a linkeket ez el fogja rontani!
Tehat a szabaly: adj hozza egy szokozt minden 60. karakter utan, kivetel ha az nem \[url=.*\].*\[url\] alaku.
Ti hogyan oldanatok meg ezt a problemat?
Elore is kosz a segitseget.
RegExp look ahead
(
[0] => naracs
[1] => korte
)
Felkiáltójel
Valahogy így: !\[url=.*\].*\[url\]
Tehát olyan szövegrészt keressen, amiben nincs az általad felsorolt karakterlánc. Ezzel az a baj, ha végiggondolod, hogy a teljes link linkszöveggel együtt kiesik a feldolgozásból, mert azt mondod, hogy olyat keresel, amiben az url nyitó és záró része nincs benne. Mivel az általad kért adatban ez benne van, így nem kapsz eredményt.
A megoldás az lehet, hogy a karakterlánc elejétől nézve megkeresed az első ] jelet, a karakterlánc végéről pedig az első [ jelet. Ezekre két értéket kapsz, amelyek a ] és [ jel pozíciói a karakterláncban.
A két érték közötti különbség fogja megadni a linkszöveg hosszát. Ha ez nagyobb, mint 60, akkor valahova beszúrhatsz egy szóközt, vagy <br />-t, ügyelve arra, hogy a törés a linkszövegbe essen.
Nem tagadás
egy kis kapkodás
Egész regexp nem illeszkedik
mi ez?
a kepfelirat
alt != felirat
off: CSS
Hogy minek ajánlgatom és miért is csináltam végül így? Azért, mert nem tudtam egy értelmes karakterszámot kitalálni, ami megfelelt volna minden igénynek. Mert az M betű nem olyan széles, mint egy i és akkor a kiszámolt karakterérték máris ugrott. Nekem mondjuk egy vékonyabb dobozba kellett, tehát nem is volt ronda ha véletlenül betette a scrollt és szélességben is korlátozva voltam.
Akármilyen számot találtam ki, a gyakorlat azt mutatta, hogy a felhasználók ki tudtak találni olyan értelmes magyar szavakat (teljesen véletlenül), amit épp egy betű miatt tört meg a régi PHP-s megoldás, pedig még befért volna, csak hát a PHP értelmező ezt nem úgy gondolta.