麻烦使用OR | PHP preg_match中的运算符

时间:2013-11-08 23:41:26

标签: php regex preg-match

使用以下字符串,这些字符串是通过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位数字。

如果有人对如何纠正这一点有任何想法,如果你与我分享,我将非常感激

2 个答案:

答案 0 :(得分:0)

你的正则表达式可以简单得多。基本上,你正在寻找可能的2个大写字母,然后是可选空格,然后是3位数。这实现了:

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

如果你想允许小写文件,你可以这样做:

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

答案 1 :(得分:0)

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

preg_match('/The quick brown fox jumped over the (.*) tractor/', $string1, $matches);