如何在统一文本中使用正则表达式模式粉碎数组?
How to shredding array with regx pattern in unified text?
我正在将文本从 txt 文件转换为 array.I 需要使用正则表达式分解此数组中的文本。
这是我的文本文件中的数组。
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
)
如果我需要举例解释一行,
输入 => 65S34523APPLE 非常漂亮6.000TX786.34563.675 234.89
所需部分=> 65S34523 苹果非常漂亮 6.000 TX 786.345 63.67 5 234.89
我想要的目标:
Array
(
[0] => 65S34523
[1] => APPLE IS VERY BEAUTIFUL
[2] => TX
[3] => 786.345
)
我需要多个regex pattern来实现 this.I 需要把我想要的数据按顺序切碎成一个 loop.but 由于没有具体的布局,不知道根据什么来选择正则表达式模式。
我试过各种代码来粉碎这个数组。
$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 并解析 array.For 示例,我试图先获取文本。
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.. .
)
当然,这不是我的 want.Each 数组有一个不同的 structure.So 我也必须检查 if-else。
As you can see in the example, there is no pure text.Here
TX,YJ,EQ should be deleted.The dots should be wiped using apples.The first letters at the beginning of the text should
be removed.The remaining special characters must be removed.
我已经尝试了很多 above.I 已经查看了替代示例。
结果;
我走投无路了。
代码:(Demo)
$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个大写字母。
- 第四组将可靠地保留三位小数。
p.s。如果你不想在 PEN?
之后出现讨厌的尾随 space,你可以使用这个:
~(\w+\d)([^\d ]+(?: [^\d ]+)*) ?[^A-Z]+([A-Z]{2})(\d+\.\d{3})~
我正在将文本从 txt 文件转换为 array.I 需要使用正则表达式分解此数组中的文本。
这是我的文本文件中的数组。
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
)
如果我需要举例解释一行,
输入 => 65S34523APPLE 非常漂亮6.000TX786.34563.675 234.89
所需部分=> 65S34523 苹果非常漂亮 6.000 TX 786.345 63.67 5 234.89
我想要的目标:
Array
(
[0] => 65S34523
[1] => APPLE IS VERY BEAUTIFUL
[2] => TX
[3] => 786.345
)
我需要多个regex pattern来实现 this.I 需要把我想要的数据按顺序切碎成一个 loop.but 由于没有具体的布局,不知道根据什么来选择正则表达式模式。
我试过各种代码来粉碎这个数组。
$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 并解析 array.For 示例,我试图先获取文本。
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.. .
)
当然,这不是我的 want.Each 数组有一个不同的 structure.So 我也必须检查 if-else。
As you can see in the example, there is no pure text.Here TX,YJ,EQ should be deleted.The dots should be wiped using apples.The first letters at the beginning of the text should be removed.The remaining special characters must be removed.
我已经尝试了很多 above.I 已经查看了替代示例。
结果;
我走投无路了。
代码:(Demo)
$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个大写字母。
- 第四组将可靠地保留三位小数。
p.s。如果你不想在 PEN?
之后出现讨厌的尾随 space,你可以使用这个:
~(\w+\d)([^\d ]+(?: [^\d ]+)*) ?[^A-Z]+([A-Z]{2})(\d+\.\d{3})~