Carissimi, so che è un argomento trattato infinite volte ma c'è una cosa che proprio non riesco a mettere a fuoco

ho un'espressione regolare molto semplice:

/^[a-zA-Z0-9\?']*$/

sparata dentro un preg_match(...).
Da quanto ho notato però questa espressione segue l'ordine in cui è stata scritta, ovvero se c'è prima un " ? " e poi un " ' " (un apice singolo) ritornerà true, ma viceversa mi darà false.
Io sto cercando di filtrare una stringa affinchè possa contenere solo questi determinati caratteri, senza curarmi dell'ordine in cui compaiono.
Sicuramente sto sbagliando qualcosa e sento che riguarda i delimitatori ^ e $. Any idea? :berto: