С регулярным выражением (которое по умолчанию является жадным) это довольно просто:
$list = preg_replace ('#^(.*class=")woman(".*)$#s', '$1man$2', $list);
Это не будет учитывать, что класс может быть чем-то отличным от тега LI или еслипоследний тег LI не имеет класса.Чтобы исправить первое, вы можете просто изменить регулярное выражение:
$list = preg_replace ('#^(.*<li class=")woman(".*)$#s', '$1man$2', $list);
Чтобы исправить последнее:
$list = preg_replace ('#^(.*)<li[^>]*>(.*)$#s', '$1<li class="man">$2', $list);