1

使用以下通过 UI 生成但显示两次以显示可能变体的字符串;

$string = 'The quick brown fox jumped over the LE300 tractor';

或者

$string = 'The quick brown fox jumped over the LE 300 tractor';

或者

$string = 'The quick brown fox jumped over the 300 series tractor';

我想提取 LE300、LE 300 或只是 300(假设访客没有进入 LE)

因此,我创建了一个 preg_match() 来提取这些位。

使用以下代码,我可以提取 LE300 或 LE 300,但不仅仅是 300。

preg_match('/(?<=\s|^)[a-zA-Z]{1,3} ?\d\d\d? ?[a-zA-Z]{0,1}? (?=\s|$)/', $string, $matches);

我试过了;

preg_match('/(?<=\s|^)[a-zA-Z]{1,3} ?\d\d\d? ?[a-zA-Z]{0,1}? ?| [0-9]{2,3} (?=\s|$)/', $Title, $matches);

preg_match('/(?<=\s|^)[a-zA-Z]{1,3} ?\d\d\d? ?[a-zA-Z]{0,1}? ?| \d\d\d? (?=\s|$)/', $Title, $matches); 

但无论我做什么,我都无法提取一个独立的 2 位或 3 位数字。

如果有人对如何纠正此问题有任何想法,如果您能与我分享,我将不胜感激

4

2 回答 2

0

您的正则表达式可能远比这简单。本质上,您正在寻找可能 2 个大写字母,后跟一个可选空格,然后是 3 个数字。这实现了:

preg_match('/((?:[A-Z]{2})?\s*\d{3})/', $string1, $matches);

如果你想允许小写 le 那么你可以这样做:

preg_match('/((?:[A-Za-z]{2})?\s*\d{3})/', $string1, $matches);
于 2013-11-12T02:56:26.250 回答
0

如果字符串的其余部分是常量,那么它可以非常简单。

preg_match('/The quick brown fox jumped over the (.*) tractor/', $string1, $matches);
于 2013-11-12T04:23:55.457 回答