Итак, кусочек дурдома по заявкам трудящихся...
Для начала выкладываю простой вопрос. Имеется текст, из которого я хочу достать все слова с большой буквы не в начале предложения.
Мне дали решение с поиском слов, но программа упорно ищет и в начале предложения:
<?php
$data = $_POST;
require_once('db.php');
require_once('global_var.php');
require_once('Functions.php');
?>
<?php
$str = '.
Съешь ещё. Этих мягких Булок да выпей Чаю.
';
echo $str;
echo "<br>";
function word_search($data) {
$array_words = explode(' ', $data);
foreach ($array_words as $key => $value) {
if ($key !== 0) {
$temp = mb_substr($value, 0, 1, 'utf-8');
if(mb_strtoupper($temp, 'utf-8') !== $temp) {
echo ' ';
}
else {
$result[' '][] = $value;
global $link;
$sql = "INSERT INTO `Name_text`(`Id_Name`, `Name`) VALUES ('".$id."', '".$value."')";
$res = mysqli_query($link, $sql);
$data = mysqli_fetch_all($res, MYSQLI_ASSOC);
}
}
}
return $result;
}
echo ' ' . var_export(word_search($str), 1) . '</pre>';
?>
Пытаюсь сделать, чтобы программа не видела слова с большой буквы после точки. Ниже перечисляю все варианты, мой испробованные с комментариями, что она делает:
$str = preg_replace('/. Э/', '',$str); //- это работает
//$str = preg_replace('/. [^А-Я]/', '',$str); //- что-то ломает и не работает
//$str = preg_replace('/. [А-Я]/', '',$str); // - ломает кодировку
//$str = preg_replace('/. [А-Я]/u', '',$str); // кодировку видит, но сносит ВСЕ большие буквы кроме первой
//$str = preg_replace('/[. А-Я]/u', '',$str);// сносит все большие буквы
//$str = preg_replace('//. [А-Я]/u/', '',$str); // ничего не видит
//$str = preg_replace('/. [АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]/u', '',$str); // тот же эффект что и [А-Я] во всех случаях
//$string = preg_replace('/$/', '. ', $string); // в конец
//$str = preg_replace('/. (^[А-Я])/', '',$str); - не работает
//$alf = array('/. [А-Я]/');
//$str = preg_replace($alf, '',$str); - тоже не работает
//$str = preg_replace('/. /+ 1', '',$str); // - выдает нуль
//$str = preg_replace('/. + 1/', '',$str); - // не работает
$str = preg_replace('/[. ] [А-Я]/', '',$str); // ломает кодировку, но работает!
Итого имеем в наличии: вариант 1, где я указываю конкретнуб букву, но буквы-то разные бывают. И последний вариант, он выдает результат:
�ъешь ещё�тих мягких Булок да выпей Чаю.
array ( ' ' => array ( 0 => '', 1 => ' ', 2 => '', 3 => '', 4 => 'Булок', 5 => 'Чаю.', 6 => ' ', 7 => '', ), )
То бишь, ломает кодировку, но за счет этого не видит большие буквы. Но иногда дает сбои. Если я суну туда текст откуда-нибудь еще, а не напишу сама.
И пытаюсь разобраться, как все-таки решить элементарный вопрос - найди все большие буквы НЕ после точки?
Aagira 9 месяцев назад #
в explode(' ', $data); заменить пробел, по которому слова разделяются, на переменную, означающую пробел. После чего в этой переменной проверять, есть ли там сочетание знаков точка-пробел. Если есть, то, соответственно, пропускать, или что-то еще делать.
Костыль, да.
Посмотрела внимательнее, в коде, значит, подобное осуществляется в строке. Щас попробую покопаться.
Aagira 9 месяцев назад #
А кодировка установлена в начале кода? А на странице?
То есть, после точки не нужны ВООБЩЕ? Или надо и после точки, и не после точки?
Мария Фомальгаут 9 месяцев назад #
Кодировку пихала, может, не туда
Aagira 9 месяцев назад #
Если так, попробуй убрать знак доллара из формулы ниже.
Мария Фомальгаут 9 месяцев назад #
Мария Фомальгаут 9 месяцев назад #
Aagira 9 месяцев назад #
Aagira 9 месяцев назад #
Здесь список знаков для функции.
Мария Фомальгаут 9 месяцев назад #
Результат:
Съешь ещё. Этих мягких Булок да выпей Чаю.
array ( ' ' => array ( 0 => '', 1 => ' ', 2 => '', 3 => '', 4 => '', 5 => '', 6 => 'Съешь', 7 => 'Этих', 8 => 'Булок', 9 => 'Чаю.', 10 => ' ', 11 => '', ), )
То есть слова после точки продолжает брать.
Aagira 9 месяцев назад #
Мария Фомальгаут 9 месяцев назад #
Aagira 9 месяцев назад #