Синтаксис регулярного выражения в PHP для извлечения всех экземпляров формата
Вопрос
Я пытаюсь извлечь все экземпляры определенного формата из строки:
Мне интересно, сможет ли мой новый Sony [PT # 123456ABC;У Sony] есть эта функция, но мой друг говорит, что новая Toshiba [PT # AD-3232hjk;Toshiba] имеет эту функцию.
Я хотел бы извлечь:
[PT# 123456ABC;Sony]
[PT# AD-3232hjk;Тошиба]
Как вы можете видеть здесь, единственными элементами в согласованных позициях являются:
- [ПТ#
- ;
- ]
Я пытался использовать различные типы strpos(), но из-за разной длины и форматов номеров деталей и названий производителей я не смог надежно извлечь эти экземпляры из гораздо большей строки.Я пробовал различные способы использования регулярных выражений для решения этой проблемы, однако мои знания о них довольно ограничены.После того, как я извлеку эти выражения и помещу их в переменные, мне нужно будет отделить номера деталей и названия производителей от выражения.Это также может быть проще выполнить с помощью регулярных выражений.
Любая помощь приветствуется.Спасибо
Решение
Я думаю, что это сделало бы это
preg_match_all( "/(\[PT#\s+.*?;\s+.*?\])/", $input, $matches );
print_r( $matches );
Альтернативно, если вы просто хотели зафиксировать уникальную информацию
preg_match_all( "/\[PT#\s+(.*?);\s+(.*?)\]/", $input, $matches );
Другие советы
$matches = array();
preg_match_all( "/\[PT#([^\];]+);([^\]]+)\]/", $input, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
echo "id=", trim($match[1]), " brand=", trim($match[2]), "\n";
}
Я так понимаю, вы будете читать из текстового файла, содержащего множество таких записей.Что вы можете сделать, это:
preg_match_all("/\[PT#(.*?);[.*]?(.*?)\]/i", $text, $result);
он поместит все совпадения в массив $result, и вы сможете получить к ним доступ следующим образом:
echo $result[1][0]; //echos first occurrence's serial
$result отсортирован по основному столбцу, и первая запись в совпадении - это полная строка совпадения
echo $result[0][0]; // would print [PT# 123456ABC; Sony]
echo $result[1][0]; // would print 123456ABC
echo $result[2][0]; // would print Sony
Надеюсь, это поможет
Редактировать:исправлено регулярное выражение, должно работать сейчас (все еще непроверенное)