Вам нужно экранировать специальные символы в RegEx с обратной косой чертой \
:
preg_match('#\|~\|#', $s);
preg_match('#%\*\|#', $s);
Вы также можете использовать preg_quote()
для экранирования специальных символов:
preg_match('#'.preg_quote('|~|%*|','#').'#', $s);