Ваш C ++ pattern
не соответствует вашему C # pattern
.
В C # префикс дословно *1007* *1007* позволяет вам писать строковые литералы без необходимости явно экранировать зарезервированныесимволы, такие как \
.
В вашем коде C ++ вы не экранируете ни один из символов \
, поэтому многие из них рассматриваются как escape-последовательности вместо фактических \
символов.Вам нужно экранировать действительные \
символы как \\
в строковых литералах, например:
const UnicodeString pattern = L"\\s+|(?<=[^\\x20-\\x7f])(?=[\\x20-\\x7f])|(?<=[\\x20-\\x7f])(?=[^\\x20-\\x7f])";
В качестве альтернативы, если вы используете один из компиляторов с поддержкой C ++ Builder C ++ 11 , вместо этого вы можете использовать необработанный строковый литерал .Похоже, что вы пытались сделать, окружив содержимое строки разделителями #
, однако вы забыли обязательный префикс R
и скобки, прикрепленные к разделителям, например:
const UnicodeString pattern = LR"#(\s+|(?<=[^\x20-\x7f])(?=[\x20-\x7f])|(?<=[\x20-\x7f])(?=[^\x20-\x7f]))#";
При этом обратите внимание, что TRegEx
в C ++ Builder внутренне использует библиотеку PCRE с открытым исходным кодом , поэтому проверьте его документацию на предмет поддерживаемого синтаксиса выражений регулярных выражений.