konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

Witajcie,
robię właśnie serwis z dyktandami dla dzieci i utknąłem w sumie w dość "trywialnym" punkcie, mianowicie, jak wygenerować <select> w odpowiednich miejscach w tekście?

Wymyśliłem, że słowa w dyktandzie od strony administratora mogą być wprowadzane w postaci np.: w<u|ó|ó>r dla słowa "wór". Ogólny schemat byłby taki <znaki|do|wyboru|(...)|poprawna_odpowiedź>.

Zakładając, że będę miał w tekście X-takich wystąpień, jak powiązać wyłapane ciągi (<....>) z miejscem, w którym zostały znalezione (żeby tam wstawić rozwijaną listę)?

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

http://uk3.php.net/manual/en/function.preg-replace.php

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

Niedawno pisałem coś podobnego. Po małej przeróbce dostosowałem to do twoich potrzeb.

Tu masz gotowca działającego. Dostosuj go sobie.

<?php
class dyktando{
var $tekst;
var $patt='#{(.*)}#Usmi';
function wybor(){
preg_match_all($this->patt, $this->tekst, $match);
$n = count($match[0]); // zliczanie tablicy
$k=0;
$tekst = $this->tekst;
while($k<$n){
$odpowiedzi = explode("|", $match[1][$k]);
$s_ile = count($odpowiedzi); // sprawdzamy ile jest wyborów odpowiedzi
$o=0;
$ret = "<select name='odp".$k."'>";
while($o<$s_ile){
$ret .= "<option value='".$odpowiedzi[$o]."'>".$odpowiedzi[$o]."</option>";
$o++;
}
$ret .= "</select>";
$tekst = str_replace("{".$match[1][$k]."}", $ret, $tekst);
$k++; }
return $tekst;
}
}

$sprawdz = new dyktando();
$sprawdz->tekst = "Wz{u|ó|o}r na pole kwadrat{u|ó} wynosi coś tam coś tam";
echo $sprawdz->wybor();
?>


Skrypt przeleci cały tekst i wygeneruje selecty tam gdzie trzeba.
efekt końcowy: http://frrezja.exxl.pl/dyktando.phpDawid M. edytował(a) ten post dnia 19.02.12 o godzinie 04:01

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

Dzięki wielkie :)

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

a dlaczego takie kombinowanie w pętli z str_replace? straszna strata czasu.

preg_replace_callback().

<?php

$text = 'Ch<rz|sz>ąsz b<rz|ż>mi w trzcinie.';

function do_replace($o) { $r = '<select>';
foreach(explode('|', $o[1]) as $opt)
$r .= '<option value="'.$opt.'">'.$opt.'</option>';
$r .= '</select>';
return $r;
}
$text = preg_replace_callback("/\<(.*?)\>/", 'do_replace', $text);
echo $text;

?>


Chyba jest różnica w ilości kodu, oraz przejrzystości.

Programować, to jedno, ale programować optymalnie i bez zbędnego komplikowania, to drugie.Jakub Świegot edytował(a) ten post dnia 22.02.12 o godzinie 21:52

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

Nie lepiej by aplikacja wyłapywała wszystkie literki u / ó i zamieniała je na selectbox, chyba że doda się np. wyjątki, które mają być pomijane ?

Wtedy łatwiej jest wprowadzać text.

Wystarczy skopiować treść książki i już mamy dyktando.

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

Tomasz Grzechowski:
Nie lepiej by aplikacja wyłapywała wszystkie literki u / ó i zamieniała je na selectbox, chyba że doda się np. wyjątki, które mają być pomijane ?

Wtedy łatwiej jest wprowadzać text.

Wystarczy skopiować treść książki i już mamy dyktando.

Popieram pomysł. W tym momencie pokusiłbym się nawet o zepchnięcie generowania selectów na JS i komputer kliencki :)

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

czemu selectboxy? inputy.

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

Programowym profesorem Miodkiem to raczej nie jestem.
Podałem jeden ze sposobów. Dla mnie ważne że działa, bo napisałem to dla jednorazowego użytku na własne potrzeby. Więc optymalizacja i wydajność mnie nie interesowała.

Ale fajnie ze podałeś inne rozwiązanie bo mi sie podoba :)
Znając życie pewnie znalazł by sie jeszcze ktoś to by uprościł to jeszcze bardziej.
Jakub Świegot:
a dlaczego takie kombinowanie w pętli z str_replace? straszna strata czasu.

preg_replace_callback().

<?php[/quote]> [quote]$text = 'Ch<rz|sz>ąsz b<rz|ż>mi w trzcinie.';

function do_replace($o) { $r = '<select>';
foreach(explode('|', $o[1]) as $opt)
$r .= '<option value="'.$opt.'">'.$opt.'</option>';
$r .= '</select>';
return $r;
}
$text = preg_replace_callback("/\<(.*?)\>/", 'do_replace', $text);
echo $text;

?>


Chyba jest różnica w ilości kodu, oraz przejrzystości.

Programować, to jedno, ale programować optymalnie i bez zbędnego komplikowania, to drugie.

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

Sebastian Zaborowski:
W tym momencie pokusiłbym się nawet o zepchnięcie generowania selectów na JS i komputer kliencki :)

I wiarygodność takiego dyktanda spada do zera :)
Wystarczy edytować źródło i skopiować poprawny tekst.

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

Jakub Świegot:
<?php[/quote]> $text = 'Ch<rz|sz>ąsz b<rz|ż>mi w trzcinie.';[quote]?>
masz za dobre zdanie o uczniach ;) koniecznie należy dodać "<cz|trz>cinie"

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

Jarosław Fogt:
Jakub Świegot:
<?php[/quote][/quote]> > $text = 'Ch<rz|sz>ąsz b<rz|ż>mi w trzcinie.';[quote][quote]?>
masz za dobre zdanie o uczniach ;) koniecznie należy dodać "<cz|trz>cinie"

Nie trzeba, ponieważ:
Dawid M.:
Sebastian Zaborowski:
W tym momencie pokusiłbym się nawet o zepchnięcie generowania selectów na JS i komputer kliencki :)

I wiarygodność takiego dyktanda spada do zera :)
Wystarczy edytować źródło i skopiować poprawny tekst.
W takim razie robisz podmiankę po stronie serwera. Nie ma możliwości "wykradzenia" właściwego kodu.

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

Przemek Czekaj:
czemu selectboxy? inputy.

Inputy odpadają, bo wtedy trzeba jeszcze zgadywać jakie ma to być słowo - np. dla "chleb" w tekście dyktanda wyjdzie "[ ]le[ ]" :)

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

true true, ale z kontekstu można by się domyślać, takie życie, nie ma lekko.

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

Tomasz Walotek:
Przemek Czekaj:
czemu selectboxy? inputy.

Inputy odpadają, bo wtedy trzeba jeszcze zgadywać jakie ma to być słowo - np. dla "chleb" w tekście dyktanda wyjdzie "[ ]le[ ]" :)

Nie prawda. W tekście dyktanda będzie [ch|h|le[p|b]. W takim wypadku mając "hlep" z selectami na początku i na końcu każdy się domyśli o co chodzi. Zwłaszcza, że jest jeszcze kontekst zdania.Sebastian Zaborowski edytował(a) ten post dnia 25.02.12 o godzinie 11:33

konto usunięte

Temat: Pytanie o wyrażenia regularne / dyktando w php

Przemek Czekaj:
true true, ale z kontekstu można by się domyślać, takie życie, nie ma lekko.

Racja, w końcu dyktando, niech się męczą! ;)

Sebastian Zaborowski
Nie prawda. W tekście dyktanda będzie [ch|h|le[p|b]. W takim wypadku mając "hlep" z selectami na
początku i na końcu każdy się domyśli o co chodzi. Zwłaszcza, że jest jeszcze kontekst zdania.

O to mi też chodziło - selecty IMHO jak najbardziej ok, ale zwykłe, tekstowe inputy odpadają.

Następna dyskusja:

wyrażenia regularne w php




Wyślij zaproszenie do