[英]Regular expression syntax In PHP to extract all instances of a format
我正在尝试从字符串中提取特定格式的所有实例:
我想知道我的新Sony [PT#123456ABC; 索尼]具有此功能,但我的朋友说新的东芝[PT#AD-3232hjk; 东芝]具有此功能。
我想提取:
[PT#123456ABC; 索尼]
[PT#AD-3232hjk; 东芝]
如您所见,处于一致位置的唯一项目是:
我试图使用各种类型的strpos(),但是由于部件号和制造商名称的长度和格式的不同,我无法可靠地从更大的字符串中提取那些实例。 我一直在尝试各种使用正则表达式解决此问题的方法,但是我对它们的了解非常有限。 将这些表达式提取并放入变量后,我将需要从表达式中分离零件号和制造商名称。 使用正则表达式也可能更容易实现。
任何帮助表示赞赏。 谢谢
$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#\s+.*?;\s+.*?\])/", $input, $matches );
print_r( $matches );
或者,如果您只想捕获唯一信息
preg_match_all( "/\[PT#\s+(.*?);\s+(.*?)\]/", $input, $matches );
我认为您将从包含许多这些条目的文本文件中读取。 您可以做的是:
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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.