Il [ ] definisce una classe di elementi. Quindi [a] matcha la "a", [abc] matcha "a" o "b" o "c". Poi [a-z] matcha tutte le lettere dalla "a" alla "z". [0-9] matcha tutti i numeri.
Puoi anche combianare tutte queste cose. Quindi puoi mettere [a-bA-B0-9] per matchare tutti le lettere e tutti i numeri.
Il ( ) definisce una sub-pattern.
Il "." invece matcha qualunque carattere.
L' * invece dice: "Se si ripete 0 o più volte". Quindi ".*" matcha qualunque cosa ripetuta per 0 o più volte.
Ora puoi combinare tutto e ottenere "(.*)". Questo nel preg_match darà un secondo elemento nell'array contenente SOLO quello dentro le parentesi.
Quindi:

#<dt>Listino</dt><dd>(.*)</dd>#

Ti darà come risultato un Array con due elementi:

"<dt>Listino</dt><dd>€ 14,00</dd>"
"€ 14,00"

Non so se ora hai le idee un po' più chiare