Ваше регулярное выражение должно быть таким:
(;|:|(?<!<)/)
с негативным взглядом сзади, демо: https://regex101.com/r/2k1WI5/1/
Ваше текущее регулярное выражение [^<]/
будет соответствовать практически любому символу, который не <
, за которым следуют /
даже \n
, пробел и японские символы.
Вот почему вы теряете некоторые буквы, так как они считаются частью разделителя.
Следуя Четвертой рекомендации , вы можете даже упростить регулярное выражение до: ([;:]|(?<!<)/)