如何使用PHP rexep或preg_match从字符串中提取字母和数字

如何使用PHP rexep或preg_match从字符串中提取字母和数字,php,regex,Php,Regex,使用虚构的字符串,例如 $string = 'Ford : LTD 1988 Ford Station Wagon with HP 351 H Engine and Performance Transmission'; 如何使用rexexp或preg_match(我也不知道哪个更好)从该字符串中提取字母和数字序列(“HP 351 H”)以用于另一个变量(即:$EngineSize) 上面是一个虚构的例子,我只是想弄清楚,我试图从UI中提取字母和数字 注意:由于这来自UI,引擎大小可能位于字符串

使用虚构的字符串,例如

$string = 'Ford : LTD 1988 Ford Station Wagon with HP 351 H Engine and Performance Transmission';
如何使用rexexp或preg_match(我也不知道哪个更好)从该字符串中提取字母和数字序列(“HP 351 H”)以用于另一个变量(即:$EngineSize)

上面是一个虚构的例子,我只是想弄清楚,我试图从UI中提取字母和数字

注意:由于这来自UI,引擎大小可能位于字符串中的任何位置,格式可能有空格,也可能没有空格,结尾可能有字母,也可能没有字母,模型可能有2个或3个字母(即LE、LT、LTD等)以及引擎大小可以是2-3位数字(可能后面跟2或3个字母)


如果有人不介意告诉我如何编写表达式来检索此数据,并向我解释哪种更好(regexp或preg_match),我将非常感激,并提前向您表示感谢。

以下regex与您描述的完全匹配,但很可能出现误报:

/(?<=\s|^)[a-zA-Z]{2,3} ?\d\d\d? ?[a-zA-Z]{1,3}?(?=\s|$)/

/(?试着向自己解释一下为什么在这个例子中不应该提取
LTD 1988
,但是
HP 351 H
应该-而且你已经完成了全部工作的一半。我不明白你想表达的意思。那么如果我不想要LTD 1988呢?这只是一个虚构的例子,我只是想了解马的一个方面如果有人不介意发布一个有用的答案,我将非常感激
LTD 1988
是一个大写字母序列,后跟一个数字序列-与
HP 351
相同。一个程序应该如何理解这些序列之间的差异?对不起,我使用了大写字母,据我所知它可能是LTD或LTD LTD或。。。(你明白了)我一直在努力在纸上画出来,我只是不知道是使用rexexp还是preg_match,但我可以将“查询”缩小到2或3个字母分组,后面是2或3个数字,中间可能有空格,后面可能是另一个字母(或2).我只是不知道如何在代码中编写它,并在另一个变量中使用它(即:$EngSize)谢谢@Borre的帮助,但我仍然不知道是使用rexexp还是preg_match,以及如何将此信息存储在变量中以供以后使用。很抱歉,raina77ow,我不了解var_dump的用法。如果您不介意详细说明,我也非常感谢,还有什么是/(??preg_match使用正则表达式,因此答案是同时使用这两种表达式,大致如下:$matches;$input='Ford:LTD 1988福特旅行车,配备HP 351 H发动机和性能变速器'preg_match'()/(?你好@Borre,很抱歉我延迟了回复。我几乎了解了所有这些…我在用一个preg_匹配()检查多个变量时遇到了问题。请允许我解释:我有一个正在读取的提要,它返回1-无限多个结果(在美国出售的汽车)和“标题”内的结果对于每一个,我试图从中提取引擎大小和型号(LE、LT等),但我得到了未定义的偏移误差