Хочу заменить все тире между английскими буквами на звездочку, но не получается. Что не так? $text = preg_replace('/(Q|W|E|R|T|Y|U|I|O|P|A|S|D|F|G|H|J|K|L|Z|X|C|V|B|N|M)-(Q|W|E|R|T|Y|U|I|O|P|A|S|D|F|G|H|J|K|L|Z|X|C|V|B|N|M)/ismU','*',$text);
найти '(первую букву) -(вторую букву)', заменить на '*'. replace: ага, нашел по шаблону G-H, заменить на... а что заменить? куда заменить?
Грубо говоря, каждый фрагмент в скобках, нумеруеца от 1 до N. И раз хочешь заменить тире между фрагментами, то надо это указать, что между найденными 1м и 2м фрагментами поставит *: "\\1*\\2".
$text = preg_replace('/(Q|W|E|R|T|Y|U|I|O|P|A|S|D|F|G|H|J|K|L|Z|X|C|V|B|N|M)-(Q|W|E|R|T|Y|U|I|O|P|A|S|D|F|G|H|J|K|L|Z|X|C|V|B|N|M)/ismU','*',$text);