0

我正在尝试从字符串中提取特定格式的所有实例:

我想知道我的新索尼 [PT# 123456ABC; Sony] 有这个功能,但我的朋友说是新的 Toshiba [PT# AD-3232hjk; 东芝]有这个功能。

我想提取:

[PT# 123456ABC;索尼]

[PT# AD-3232hjk;东芝]

正如您在此处看到的,唯一处于一致位置的项目是:

  • [PT#
  • ;
  • ]

我试图使用各种类型的 strpos() 但由于部件号和制造商名称的长度和格式不同,我无法可靠地从更大的字符串中提取这些实例。我一直在尝试各种方法来使用正则表达式来解决这个问题,但是我对它们的了解相当有限。在我将这些表达式提取并放入变量后,我需要将部件号和制造商名称与表达式分开。这也可能更容易使用正则表达式来完成。

任何帮助表示赞赏。谢谢

4

3 回答 3

1
$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";
}
于 2009-05-07T23:46:58.383 回答
0

我认为这会做到

preg_match_all( "/(\[PT#\s+.*?;\s+.*?\])/", $input, $matches );

print_r( $matches );

或者,如果您只是想捕获独特的信息

preg_match_all( "/\[PT#\s+(.*?);\s+(.*?)\]/", $input, $matches );
于 2009-05-07T23:29:37.163 回答
0

我认为您将从包含大量这些条目的文本文件中读取。你可以做的是:

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

希望有帮助

编辑:修复了正则表达式,现在应该可以工作(仍然未经测试)

于 2009-05-07T23:38:32.040 回答