Всем привет.
Такая ситуация.
Делаю клиент сервиса, который сбегает на сайт банка и принесет строку с данными.
Строка - есть.
Далее с помошью pregmatch выбрать нужное.
Но как ни старался, vardump возвращает пустой массив. Значит - не нашло.
Но я пробовал скопировать строку в документ и на месте провести все операции.
И этот способ сработал. Значит - шаблон работает нормально.
Но когда ищу нужную мне строку в строке которая возвращается с сервера сервиса, функция pregmatch не находит сходств.
В чем может быть проблемма. ???
Заранее спасибо за внимание.
1. p33t - 20 Августа, 2016 - 02:27:34 - перейти к сообщению
2. Мелкий - 20 Августа, 2016 - 10:10:30 - перейти к сообщению
Что делать, что делать. Проверять, что вам вернулось. В тяжёлых случаях - до каждого байта. Затем править регулярку с этим знанием.
3. p33t - 20 Августа, 2016 - 16:03:22 - перейти к сообщению
Как я только не проверял....
В принципе, сам шаблон скорее всего ошибок не содержит.
Но сверил кодировку строки в крторой производится поиск и кодировку переменной в которой находится сам патэрн. И вот что у меня вышло:
Строка - UTF-8
Патэрн- ASCII
Возможно тут и зарыта псина.
Но пробовал изменить кодировку всего документа (через header('content-type...))
Ничего !!!
Патэрн остается в ASCII.
Так же пробовал функциями mb_convert_encoding и mb_internal_encoding поменять кодировку строки и документа в целом.
Но все равно кодировка патерна остается той же.
Что не так ????
Вот кусок строки в которой ищу:
Доллар США120051.00840USDЕвро122271.009 78EURЗлотый15010.43985PLN
а вот сам патерн: "/(\d+\.\d+)USD/"
А нужно выбрать цифры перед строкой USD - то есть: 120051.00840
(Добавление)
Кстати, большое спасибо за отклик.
А каким способом еще можно побайтово проверить сопоставимые строки ???
В принципе, сам шаблон скорее всего ошибок не содержит.
Но сверил кодировку строки в крторой производится поиск и кодировку переменной в которой находится сам патэрн. И вот что у меня вышло:
Строка - UTF-8
Патэрн- ASCII
Возможно тут и зарыта псина.
Но пробовал изменить кодировку всего документа (через header('content-type...))
Ничего !!!
Патэрн остается в ASCII.
Так же пробовал функциями mb_convert_encoding и mb_internal_encoding поменять кодировку строки и документа в целом.
Но все равно кодировка патерна остается той же.
Что не так ????
Вот кусок строки в которой ищу:
Доллар США120051.00840USDЕвро122271.009 78EURЗлотый15010.43985PLN
а вот сам патерн: "/(\d+\.\d+)USD/"
А нужно выбрать цифры перед строкой USD - то есть: 120051.00840
(Добавление)
Кстати, большое спасибо за отклик.
А каким способом еще можно побайтово проверить сопоставимые строки ???
4. Мелкий - 20 Августа, 2016 - 16:31:13 - перейти к сообщению
p33t пишет:
Патэрн остается в ASCII.
Значит в паттерне вы используете только ASCII-символы.
UTF8 и огромная куча других кодировок являются надмножеством ASCII. Если в строке используются символы только из ASCII - то все эти кодировки будут бинарно идентичны.
p33t пишет:
А каким способом еще можно побайтово проверить сопоставимые строки ???
Вывести на stdout и скормить в hd.
Или сдампить в файлик и посмотреть любым hex редактором.
p33t пишет:
Вот кусок строки в которой ищу:
Ну уж вряд ли этот кусок записан вот так без какого-либо разделителя. Вот отчего мне кажется, что это кусок xml?..
5. Строитель - 20 Августа, 2016 - 17:17:32 - перейти к сообщению
p33t пишет:
Добавил к вашему шаблону два модификатора u - что говорит об использовании юникода, и i - что говорит о не чувствительности к регистунужно выбрать цифры перед строкой USD - то есть: 120051.00840
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- $search = 'Доллар США120051.00840USDЕвро122271.009 78EURЗлотый15010.43985PLN';
- echo $matches[1];//120051.00840