我需要从来自短信的非结构化字符串中提取数据
我需要提取的数据如下
代码:这是一个由 5 个字母数字组成的字符串,它必须包含至少一个数字
身份证件:这是一个 5 到 8 个字符之间的数字字符串,有效格式为:
V55555555
E55555555
55555
55 555
E55 555 555
55 555 555
5 555 555
555 555
我需要提取的数据可以在字符串中的任何位置,我已经对字符串进行了规范化,只用一个替换了重复的空格,并删除了不是空格、数字和字母的任何内容
样品
1. resuelvete 15C20 Pdero Perez c.i. V55.555.555,
2. Pedro Perez resuelvete 15c20 55 555 555,
3. 15c20 Resuelvete 555555 Pedro Perez,
4. Resuelvete 555555 Pedro Perez 15c20
对于代码部分,我尝试了这个正则表达式:
$regex = '/([a-zA-Z0-9]{5})/i';
我也试过这个:$regex = '(?=.{5})(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[a-zA-Z\d]';
,我在这里看到但它不起作用(我必须说我不完全理解这个正则表达式)
但它不起作用,它返回字符串的前五个字符,我需要它在这个例子中返回15c20
对于身份文件部分,我尝试了以下方法:
// This not work with spaces
$regex = "/(V|E)?(\d{5,8})/i";
// This not work without spaces
//This fail in first case returning only 7 digits instead of 8
// Also fails in cases 3 and 4, does not match anything
$regex = "/(V|E)?(\d{1,2}? ?\d{3} ?\d{3})/i";