Этот вопрос может показаться немного странным. Я получаю строку из пакета TCP / IP, что-то вроде этого ..
«SiteName»: «GPRSSignalStrength»: «SelectedNetworkOperators»: «GPRSReportingTimeOut»: «SensorReportCount»: «SensorReportUpdateStatus»: «PacketLength»: «SensorStatus»: «SensorReportingInterval»: «SensorType»: «GSM ID»: «Запуск записи», «S2, Main Kitchen KE», «000», «3012», «RSSI», «SensorOpticStatus», «Record end»: «Record start», «S2, Main Kitchen KE», «000», «3012», RSSI "," SensorOpticStatus "," Record end "
- Регулярное выражение PHP для извлечения ссылки / кода TwitPic, если присутствует
- Идентификатор видео Vimeo YouTube из встроенного кода или URL-адреса с регулярным выражением PHP RegEx
- Reg exp для youtube link
- Текстовое URL-адрес регулярного выражения PHP для HTML-ссылки
- PHP: возвращает строку между двумя символами
Моя цель – получить «SiteName» и все значения, начинающиеся с «GSM ID», в другую строку. Основная проблема заключается в том, что длина пакета может изменяться после блока «Запуск записи» на основе значения «SensorReportCount». если «SensorReportCount» = 2, то мы будем иметь тот же самый пакет, который был скопирован выше, если «SensorReportCount» = 3, тогда у нас будет дополнительный отчет, который будет выглядеть как что-то
«SiteName»: «GPRSSignalStrength»: «SelectedNetworkOperators»: «GPRSReportingTimeOut»: «SensorReportCount»: «SensorReportUpdateStatus»: «PacketLength»: «SensorStatus»: «SensorReportingInterval»: «SensorType»: «GSM ID»: «Запуск записи», «S2, Main Kitchen KE», «000», «3012», «RSSI», «SensorOpticStatus», «Record end»: «Record start», «S2, Main Kitchen KE», «000», «3012», RSSI »,« SensorOpticStatus »,« Record end »:« Record start »,« S2, Main Kitchen KE »,« 000 »,« 3012 »,« RSSI »,« SensorOpticStatus »,« Record end ».
как можно сохранить «Имя сайта» и все остальные блоки после «GSM ID» в другой строке.?
Используйте это регулярное выражение:
^(.*?):.*("GSM ID".*)\.
См. Демо-версию Regex
Используйте preg_match, чтобы получить подматрицы из двух групп захвата. Первая группа захвата предназначена для «SiteName», а вторая – для всего после и «GSM ID».
строка
$text = '"SiteName":"GPRSSignalStrength":"SelectedNetworkOperators":"GPRSReportingTimeOut":"SensorReportCount":"SensorReportUpdateStatus":"PacketLength":"SensorStatus":"SensorReportingInterval":"SensorType":"GSM ID":"Record start","S2, Main Kitchen KE","000","3012,"RSSI","SensorOpticStatus","Record end":"Record start","S2, Main Kitchen KE","000","3012,"RSSI","SensorOpticStatus","Record end"';
PHP Regular Expresion
$pattern = '[^(.+?:).+("GSM ID":.+)]'; preg_match_all($pattern, $text, $out);
Для шаблона вам нужно использовать +
not *
cause, +
check для 1 или более, что означает, если он найден.
результат
Array ( [0] => Array ( [0] => "SiteName":"GPRSSignalStrength":"SelectedNetworkOperators":"GPRSReportingTimeOut":"SensorReportCount":"SensorReportUpdateStatus":"PacketLength":"SensorStatus":"SensorReportingInterval":"SensorType":"GSM ID":"Record start","S2, Main Kitchen KE","000","3012,"RSSI","SensorOpticStatus","Record end":"Record start","S2, Main Kitchen KE","000","3012,"RSSI","SensorOpticStatus","Record end" ) [1] => Array ( [0] => "SiteName": ) [2] => Array ( [0] => "GSM ID":"Record start","S2, Main Kitchen KE","000","3012,"RSSI","SensorOpticStatus","Record end":"Record start","S2, Main Kitchen KE","000","3012,"RSSI","SensorOpticStatus","Record end" ) )
Результат будет таким же, как и конкатенация индекса массива 1 и 2.
PHP Explode
$arr = explode(':"GSM ID"', $text); echo '"SiteName":"GSM ID"'.$arr[1];
Вывод:
«SiteName»: «GSM ID»: «Запуск записи», «S2, Main Kitchen KE», «000», «3012», «RSSI», «SensorOpticStatus», «Record end»: «Record start», «S2, «Основная кухня KE», «000», «3012», «RSSI», «SensorOpticStatus», «Record end»