我正在将文本从txt文件转换为数组。我需要使用正则表达式粉碎此数组中的文本。
这是我的文本文件中的数组。
Array
(
[0] => 65S34523APPLE IS VERY BEAUTIFUL6.000TX786.34563.675 234.89
[1] => 06W01232BOOK IS SUCCESSFUL1.000YJ160.00021.853 496.00
[2] => 67E45643DO YOU HAVE A PEN? 7/56.450EQ9000.3451.432 765.12
)
如果我需要解释一行作为示例,
输入 => 65S34523苹果非常BEAUTIFUL6.000TX786.34563.675 234.89
必填部分 =>65S34523苹果很漂亮6.000TX786.34563.67 5 234.89
我想要的目标:
Array
(
[0] => 65S34523
[1] => APPLE IS VERY BEAUTIFUL
[2] => TX
[3] => 786.345
)
我需要多个正则表达式模式来实现这一点。我需要在循环中按顺序粉碎我想要的数据,但由于没有特定的布局,我不知道根据正则表达式模式选择什么。
我已经尝试了各种代码来粉碎这个数组。
$smash =
array('65S34523APPLE IS VERY BEAUTIFUL6.000TX786.34563.675 234.89',
'06W01232BOOK IS SUCCESSFUL1.000YJ160.00021.853 496.00',
'67E45643DO YOU HAVE A PEN? 7/56.450EQ9000.3451.432 765.12');
我正在尝试对数组进行 foreach 和解析。例如,我试图先获取文本。
foreach ($smash as $row) {
$delete_numbers = preg_replace('/d/', '', $smash);
}
echo "<pre>";
print_r($delete_numbers);
echo "</pre>";
原来是这样。
Array
(
[0] => SAPPLE IS VERY BEAUTIFUL.TX.. .
[1] => WBOOK IS SUCCESSFUL.YJ.. .
[2] => EDO YOU HAVE A PEN? /.EQ.. .
)
自然,这不是我想要的。每个数组都有不同的结构。所以我也必须检查一下是否。
正如您在示例中所看到的,没有纯文本。这里TX,YJ,EQ 应该删除。这些点应该用苹果擦拭。正文开头的第一个字母应 被删除。必须删除剩余的特殊字符。
我已经尝试了上述许多方法。我看过其他例子。
结果;
我陷入了死胡同。
代码:(演示(
$smash = ['65S34523APPLE IS VERY BEAUTIFUL6.000TX786.34563.675 234.89',
'06W01232BOOK IS SUCCESSFUL1.000YJ160.00021.853 496.00',
'67E45643DO YOU HAVE A PEN? 7/56.450EQ9000.3451.432 765.12'];
foreach ($smash as $line) {
$result[] = preg_match('~(w+d)(D+)[^A-Z]+([A-Z]{2})(d+.d{3})~', $line, $out) ? array_slice($out, 1) : [];
}
var_export($result);
输出:
array (
0 =>
array (
0 => '65S34523',
1 => 'APPLE IS VERY BEAUTIFUL',
2 => 'TX',
3 => '786.345',
),
1 =>
array (
0 => '06W01232',
1 => 'BOOK IS SUCCESSFUL',
2 => 'YJ',
3 => '160.000',
),
2 =>
array (
0 => '67E45643',
1 => 'DO YOU HAVE A PEN? ',
2 => 'EQ',
3 => '9000.345',
),
)
我的模式假设:
- 第一组将由数字和字母组成,并以数字结尾。
- 第二组不包含数字。
- 第三组始终是 2 个大写字母。
- 第四组将可靠地具有三个小数位。
附言如果你不想要那个讨厌的尾随空格后PEN?
,你可以使用这个:
https://3v4l.org/9XpA6
~(w+d)([^d ]+(?: [^d ]+)*) ?[^A-Z]+([A-Z]{2})(d+.d{3})~