我试图从字符串中提取特定格式的所有实例:
我想知道我的新索尼[PT#123456ABC;索尼]有这个功能,但我的朋友说新的东芝[PT#AD-3232hjk;东芝]有这个功能。
我想提取:
[PT#123456ABC;索尼]
[PT#AD-3232hjk;东芝]
正如您在此处所见,一致职位中的唯一项目是:
我试图使用各种类型的strpos(),但由于部件号和制造商名称的长度和格式不同,我无法从更大的字符串中可靠地提取这些实例。我一直在尝试各种方法来使用正则表达式来解决这个问题,但是我对它们的了解相当有限。在我将这些表达式提取并放入变量后,我将需要将部件号和制造商名称与表达式分开。使用正则表达式也可以更容易地实现这一点。
感谢任何帮助。 感谢
答案 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
希望有所帮助
编辑:修复正则表达式,现在应该工作(仍未测试)