Как решить проблему с объединенными словами после того, как RegEx удаляет пробелы из знаков препинания? - PullRequest
0 голосов
/ 15 июня 2019

Мой код RegEx удаляет пробелы с левой и правой стороны знаков препинания внутри строки.после удаления этих пробелов все в порядке, но некоторые слова объединились.

Я пытался изменить свой код RegEx, но результат был именно тем, что я хотел, даже я пытался проверить свой RegEx на веб-сайтах онлайн-тестированиякак 100 regex101.com и другие.результат в порядке, и слова не будут объединяться, но в моем коде результат другой.Я даже пробовал разные коды RegEx с разными стилями для этого, но все же в моем коде некоторые слова объединяются.Кстати, язык строк Farsi.но метод отлично работает для обоих.

$text = "سلام ، این یک متن (   است) متشکرم.";
$removePattern = "/(\s+)*([\.\!\:\)\]\}\(\[\{\?\,\;\؟\،\؛])(\s+)*/";
$replace = "$2";
$text = preg_replace($removePattern, $replace, $text);

Я ожидаю, что результат будет
سلام،این یک متن(است)متشکرم.

Но результат будет примерно таким
سلاماین یک متنامتحانیاست (شایداینطوری) بهتر، باشه

Видите ли вы, как سلاماین и متنامتحانیاست соединяются и склеиваются?моя проблема в том, как я могу решить эту проблему и как решить эту проблему?это должно работать для разных строк с разным содержанием для фарси.

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Вам нужно только дважды заменить это. Сначала замените это регулярное выражение "[(] [] *" на (а во второй раз замените его на "[] * [)]" на)

0 голосов
/ 15 июня 2019

вы можете общаться между Linux и Windows Systems.они обрабатывают пробельные символы по-разному.

в любом случае

"/(\s+)*([\.\!\:\)\]\}\(\[\{\?\,\;\؟\،\؛])(\s+)*/";

change to

"/(\R+)*([\.\!\:\)\]\}\(\[\{\?\,\;\؟\،\؛])(\R+)*/";

вы сопоставите любой символ пробела независимо от системы

...