我在尝试提取出所有实例中的一个特定的格式从a string:

我想知道如果我的新的索尼的[PT#123456ABC;索尼]具有这一功能,但我的朋友说,新的东芝[PT#广告3232hjk;东芝]有这个功能。

我想提取:

[PT#123456ABC;索尼]

[PT#广告3232hjk;东芝]

你可以在这里看到,只有项目的一贯立场是:

  • [PT#
  • ;
  • ]

我正尝试使用各种类型的strpos()但是由于变化的长度和格式的一部分数字和制造商名字我无法可靠地拔出那些情况从一个更大的串。我一直在尝试各种方式来利用经常表达的解决这个但是我的知识是相当有限的。之后我有这些表达方式提取的,并放入变量,然后,我将需要单独的部分数字和制造商名称从的表达。这也可以更容易地完成使用普通的表达。

任何帮助表示赞赏。感谢

有帮助吗?

解决方案

我认为这会做

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

print_r( $matches );

Altternatively,如果你只是想要捕获的唯一信息

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);

它将把所有的比赛进入array$结果并且可以访问他们,因为这样:

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

希望帮助

编辑:固定regex,应该现在的工作(仍然未经测试)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top