处理这个疯狂的字符串,这是从PDF到文本框架的转换。
我将在最后发布它,但在这里破译可能更容易:https://regex101.com/r/DxXupz/1
我想出了如何使用此正则表达式在1.
和2.
之间进行匹配:
1\.(.*?)2\.
但是正如您所看到的,我正在处理的$string
具有各种数字和小数等,并且一直上升到11.
是否有一个正则表达式解决方案可在一个preg_match_all
函数查询中捕获所有编号列表,例如(上面的正则表达式适用于1.
至2.
的示例):
preg_match_all('/1\.(.*?)2\./s', $string, $matches);
要将内容从1.
带回到2.
,从2.
带回到3.
,依此类推?
$string = "1. CZ243 96V DC
20
0pcs
11.35U
SD 220
.
00
USD
2
”
,74mm/s
25lbs .
2.
CV243 96V DC
10
0pcs
11.35USD 1135
.00
USD
4
”
,74mm/s
25lbs
3
. CV243 96V DC
150pcs 12.20
U
SD 1830.00
USD
6
”
,74mm/s
25lbs .
4. CV243 96V DC
100
pcs 13.50
1USD 1350.00
USD
8
”
,74mm/s
25lbs .
5
. CV243 96V DC
50
pcs
15.00USD
750.00
USD
10
”
,74mm/s
25lbs .
6. CV243 96V DC
200pcs
15.00USD
3000.00
USD
12
”
,74mm/s
25lbs .
7
. CV243 96V DC
50pcs
16.00USD 800.00
USD
14
”
,74mm/s
25lbs .
8. CV243 96V DC
75pcs 16.50
USD
1237.50
USD
16
”
,74mm/s
25lbs .
9. CV243 96V DC
5
0pcs
18.46USD
923.00
USD
18
”
,74mm/s
25lbs .
10.CV243 96V DC
50pcs
18.46USD
923.00
USD
20
”
,74mm/s
25lbs .
11.
CV243 96V DC
5
0pcs
20.77USD 1038.50
USD
24
”
,74mm/s
25lbs .
";
答案 0 :(得分:1)
此正则表达式应为您提供所需的结果
fetch('https://www.random.org/cgi-bin/randbyte?nbytes=2')
.then(response=>response.body.getReader())
.then(reader=>0/*Here convert to Uint16*/)
它将查找一些数字,然后可选地跟空格,句点,某些可能的空格和字符串\d+\s*\.\s*(CV243 96V DC.*?)(?=\d+\s*\.\s*CV243 96V DC|$)
。然后,它将抓取所有字符,直到下一次出现的起始模式或字符串结尾为止(使用正向超前断言,因此在该匹配中不捕获字符)。在PHP中:
CV243 96V DC
输出有些混乱,因此在这里我将不重复所有操作,但是您可以在此demo中看到它的运行情况。这是前两个值:
preg_match_all('/\d+\s*\.\s*(CV243 96V DC.*?)(?=\d+\s*\.\s*CV243 96V DC|$)/s', $string, $matches);
print_r($matches[1]);
注意
我假设您的数据应该以{{1}}开头,而不是以[0] => CV243 96V DC 20 0pcs 11.35U SD 220 . 00 USD 2 ” ,74mm/s 25lbs .
[1] => CV243 96V DC 10 0pcs 11.35USD 1135 .00 USD 4 ” ,74mm/s 25lbs
开头。如果它应该以{{1}}开头,而您仍然想捕获它,请将正则表达式中的1. CV243
更改为1. CZ243
。