Синтаксис регулярного выражения в PHP для извлечения всех экземпляров формата

StackOverflow https://stackoverflow.com/questions/837550

  •  10-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь извлечь все экземпляры определенного формата из строки:

Мне интересно, сможет ли мой новый 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

Надеюсь, это поможет

Редактировать:исправлено регулярное выражение, должно работать сейчас (все еще непроверенное)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top