#php #preg-split
#php #preg-split
Вопрос:
Я использую preg_split()
для получения массива предложений из строки.
$sentences = preg_split("/([.?!rn] )/", $text, 0, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
Но когда $text
содержит ‘amp;’, например:
$text = 'this is test. we are testing this amp; we are over.';
затем он перестает соответствовать после ‘amp;’.
Комментарии:
1. Не могли бы вы уточнить «это мы останавливаем после amp;»? Это останавливает синтаксический анализ строки или она разбивается на амперсанд (amp;) или что?
2. Я бы обновил ваше регулярное выражение, чтобы перехватывать больше типов предложений и не удалять
.
.([^.?!] (?=[.?!]['"]?s*)(?:[.?!]['"]?s*))
у меня сработало, но я, возможно, пропустил другие неясные типы окончаний / начинаний предложений. После получения совпадений (без разделения) запустите trim, чтобы избавиться от пробелов.
Ответ №1:
Ваш preg_split корректно обрабатывает предложения с амперсандами, например:
$text = 'Sample sentence. Another sentence! Sentence with the special character amp; (ampersand). Last sentence.';
$sentences = preg_split("/([.?!rn] )/", $text, 0, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
print_r($sentences);
Вывод:
Array
(
[0] => Sample sentence
[1] => .
[2] => Another sentence
[3] => !
[4] => Sentence with the special character amp; (ampersand)
[5] => .
[6] => Last sentence
[7] => .
)
Комментарии:
1. Это была ошибка с ajax, который я использовал для отправки текста с помощью amp; splited it.php работает нормально. это проблема с ajax.
Ответ №2:
Ваш скрипт:
$text = 'this is test. we are testing this amp; we are over.';
$sentences = preg_split("/([.?!rn] )/", $text, 0, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
echo '<pre>'.print_r($sentences, true).'</pre>';
Мой вывод:
Массив ( [0] => это тест [1] => . [2] => мы тестируем это, и мы закончили [3] => . )
Я не понимаю вашей проблемы.