使用以下字符串,这些字符串是通过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位数字。
如果有人对如何纠正这一点有任何想法,如果你与我分享,我将非常感激
答案 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);