正则表达式语法在PHP中提取格式的所有实例

时间:2009-05-07 23:26:11

标签: php regex extract

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

  

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

我想提取:

  

[PT#123456ABC;索尼]

     

[PT#AD-3232hjk;东芝]

正如您在此处所见,一致职位中的唯一项目是:

  • [PT#

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

感谢任何帮助。 感谢

3 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分:0)

我认为这样做会

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

print_r( $matches );

或者,如果您只想捕获唯一信息

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

答案 2 :(得分:0)

我认为你将从包含大量条目的文本文件中读取。你能做的是:

preg_match_all("/\[PT#(.*?);[.*]?(.*?)\]/i", $text, $result);

它会将所有匹配项放入数组$ result中,您可以这样访问它们:

echo $result[1][0]; //echos first occurrence's serial

$ result是排序列major,匹配的第一个条目是完整的匹配字符串

echo $result[0][0]; // would print [PT# 123456ABC; Sony]
echo $result[1][0]; // would print 123456ABC
echo $result[2][0]; // would print Sony

希望有所帮助

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