SMS からの非構造化文字列からデータを抽出する必要があります
抽出する必要があるデータは次のとおりです
コード: これは 5 文字の英数字の文字列で、少なくとも 1 桁の数字が含まれている必要があります
身分証明書: これは 5 ~ 8 文字の数値文字列です。有効な形式は次のとおりです。
V55555555
E55555555
55555
55 555
E55 555 555
55 555 555
5 555 555
555 555
抽出する必要があるデータは、文字列内の任意の位置にある可能性があります。文字列を正規化し、重複するスペースを 1 つだけ置き換え、スペース、数字、文字以外のものをすべて削除しました
サンプル
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]';
、ここに表示されますが、機能していません (この正規表現を完全には理解していないと言わざるを得ません)
しかし、それは機能していません。文字列の最初の 5 文字を返します。この例で返す必要があります。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";